Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!なんど見ても綺麗なコードです。
kazuhoさんがやってくれました。ずいぶん前からjsonをC++でパース(SAXじゃなくてDOM)するのに小さいライブラリないかなーと思ってました。個人的にはjson-cというのを使ってたのですが...
http://mattn.kaoriya.net/software/lang/c/20090702153947.htm
で、先日ちょっと出張があって新幹線に乗る事があり、ちょっとルールを決めて僕にも同じ物が書けるか試してみました。
以下ルール。
- picojson相当のjsonパーサをC++で書く
- インターネット等の外部リソースは見てはいけない(picojsonも見ちゃダメ)
- 見て良いのは/usr/include以下だけ
- 制限時間は新幹線に乗っていられる間だけ
但し、後からpicojsonを見て気づいたのですが、"\uXXXX"といった文字列表記に対応出来ていません。まぁもう外部リソースを見てしまったので、これから対応するつもりはありません。
一応、マルチブートのノートPCだったのでWindowsでもコンパイル出来る様にしてあります。
あと、オブジェクトのリテラルで最後がカンマで終わる様なフォーマットも#define宣言でパース出来る様にしました。さらに関数テンプレートが使えないVC6でもビルド出来る様になっています。(使い方が若干異なりますが)
picojsonと同じようにヘッダファイルだけで使えます。ただしkazuhoさん程のC++erでは無いので抜けがあるかもしれませんが...苦笑。
githubに適当にアップしておきました。
mattn/minijson - GitHubネタですが、よろしければ話題のネタ程度にどうぞ。
simple C++ json library. (clone of kazuho/picojson)
https://github.com/mattn/minijson