目的
大学の課題としてjsonファイルから年賀状等の宛名面を作成するプログラムを書いた。
その時に使ったjsonパーサのparsonが思いのほか便利だったのでその使い方を忘れないうちにメモしておく。
具体的なサンプルは書いていないが上のプログラムのソースコードとparson.c, parson.hを読めばある程度使い方がわかると思います。
jsonファイルのオープン
JSON_Value piyo = json_parse_file("filename.json");
これでjsonファイルをJSON_Value型のroot_valueに読み込めます。
コメントを書いておけるhjson形式のファイルを読み込むときは
json_parse_file_with_comments("filename.json")を使えばよいと思います。
メンバーではない要素を取得する方法
JSON_Object piyo = json_object(hoge);
JSON_Object piyo = json_object(hoge);
のようにすることでJSON_Object型の変数hogeの下にあるオブジェクトや文字列を取得できます。
以下のようなjsonファイルの時です。
{
"hogehoge"
}
メンバーを指定して、値を取得する
JSON_Object piyo = json_object_get_object(hoge, "fuga");
JSON_Object piyo = json_object_get_number(hoge, "fuga");
JSON_Object型の変数hogeに格納されているjsonオブジェクトの中でfugaという名前を持つメンバーの値を取得します。
値の型に応じて、最後の部分を変えます。
#配列の扱い
JSON_Object piyo = json_array_get_object(hoge, n);
とすることでjsonの配列を代入しておいたhogeの中でn-1番目のオブジェクトを取得できる。
以下のようなときに
JSON_Value hoge = json_parse_file("filename.json");
JSON_Object a = json_object(hoge);
JSON_Object b = json_array_get_string(a, 1);
とすることでfooを取得して、bに代入できる。
{
[
"hoge",
"foo",
"fuga"
]
}
#日本語について
utf-8をサポートしており、日本語も扱えました。
#ドットで指定して値を得る
JSON_Value piyo = json_object_dotget_string(hoge, key);
keyの部分にhoge以降の名前をドットで区切って渡すことで値を得ることができます。
下のような構造のjsonファイルの時に
JSON_Value piyo = json_object_dotget_string(hoge, foo.first);
とすることでfooいかにあるfirstの値を得られます。
{
"foo":{
"first": "nya",
"second": "wan"
}
"fuga":{
"first": "kerokero",
"second": "mo"
}
}
要素の追加
set, dotsetとある関数を使うとjsonに要素を追加できるようです。
ファイルへの書き込みまでやっているのかはわかりませんでした。
最後
parsonは要素の取得だけでなく、追加、削除までやれるらしいが今回はその機能までは調べなかった。
個人的にはドットで要素を指定できることが便利だと思います。