« MySQL のトリガーの実用性を確認するために InnoDB の SELECT COUNT(*) を高速化してみる | Main | PicoJSON, a header-file-only JSON parser in C++ »

July 02, 2009

今更 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!

TrackBack

TrackBack URL for this entry:
http://bb.lekumo.jp/t/trackback/404050/20433943

Listed below are links to weblogs that reference 今更 C++ で JSON パーサ「picojson」を書いたわけ:

Comments

こんにちわ
picojsonについてちょっと教えていただきたいのですが、データの中に改行コードがある場合"syntax error"として扱われてしまうようなのです。
(ファイルからjsonデータを読み込んでいるのですが、ひとつのデータが複数行にまたがる場合にうまくいきません。jsoncppだと正しく処理しています。)
これは致し方ないのでしょうか?

すみません。今更遅いと思いますが...

JSON 中の文字列に改行が含まれるのであれば、それは JSON の仕様に違反している (のでエラーとして扱うべき) だと思います。

JSON 中の文字列以外の部分に改行が含まれている場合、picojson は syntax error にはしないと思います。

Post a comment