今更 C++ で JSON パーサ「picojson」を書いたわけ
既に mattn さんが、「Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!」で紹介してくださっています (mattn さん、アドバイス&バグ情報ありがとうございます!) が、いまさら C++ で JSON パーサを作りました。それは、以下の3点を満たすものがなかったから。
- ヘッダファイル only
- boost 等、他の重たいライブラリに依存しない
- array や object が STL にマッピングされる
コードは、coderepos に置いてありますので、よろしければお使いください (picojson.h)。
なお、現時点での制限事項として、
\n や \r, \uXXXX といったエスケープの処理が未実装rev. 34232 で対応しました (含サロゲートペア)空白文字の判断基準が RFC と異なるrev. 34277 で空白と文字列定数内で許容する文字を RFC4627 に一致させました
といった点がありますので、解釈のゆれによってセキュリティ上問題が発生しうるケースでのご使用は注意していただければと思います。
あとは、operator<< と >> を定義して、iostream から読み書きできるようにするくらいかなrev. 32477 の時点で operator<< と >> に対応済です。それでは have fun!
こんにちわ
picojsonについてちょっと教えていただきたいのですが、データの中に改行コードがある場合"syntax error"として扱われてしまうようなのです。
(ファイルからjsonデータを読み込んでいるのですが、ひとつのデータが複数行にまたがる場合にうまくいきません。jsoncppだと正しく処理しています。)
これは致し方ないのでしょうか?
Posted by: yama | December 24, 2009 at 05:44 PM
すみません。今更遅いと思いますが...
JSON 中の文字列に改行が含まれるのであれば、それは JSON の仕様に違反している (のでエラーとして扱うべき) だと思います。
JSON 中の文字列以外の部分に改行が含まれている場合、picojson は syntax error にはしないと思います。
Posted by: kazuho | January 07, 2010 at 06:29 PM