2011/03/19

以前、kazuhoさんが書いたpicojsonの紹介をさせて頂いたのですが、あれから何度も使わせて頂いていてkazuhoさんのいる方角には足を向けて寝られないmattnです。
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以下だけ
  • 制限時間は新幹線に乗っていられる間だけ
このルールで新幹線に乗った途端、ノートPCを開いて書き始めました。いろいろ書いては直してを繰り返し、出来上がった物を公開しておきます。おそらく、picojsonと同じ様な動きをします。
但し、後から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
ネタですが、よろしければ話題のネタ程度にどうぞ。
Posted at 23:11 | WriteBacks () | Edit
Edit this entry...

wikieditish message: Ready to edit this entry.






















A quick preview will be rendered here when you click "Preview" button.