ここから本文です

picojsonの使い方が分かる方いませんか?

www24yaさん

2010/3/1501:38:05

picojsonの使い方が分かる方いませんか?

プログラミング初心者です。
C++でJSONの作成、書き換えをしたいのですが、picojsonの使い方が分かる方いませんか?
参考:
http://developer.cybozu.co.jp/kazuho/2009/07/c-json-picojson.html
http://mattn.kaoriya.net/software/lang/c/20090702153947.htm

閲覧数:
7,696
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

mattn_jpさん

2010/3/1510:06:41

上記リンク先の例でパース部は以下の部分です。

--------------------------------
value v;
std::string err;
parse(v, json, json + strlne(json), &err);
--------------------------------

第2パラメータについてはイテレータによりパース後の位置に移動するので、破壊的にしたくない場合は一度他の変数に預けるのが良いかと思います。型はnull, boolean, number, string, array, object が使えます。これらを束ねてvalueという型が存在します。
パースするとvalueが得られ、テンプレートを使用してリフレクションできます。

--------------------------------
v.is<std::string>(); // string
v.is<array>(); // array
v.is<object>(); // object
...
--------------------------------

実際の型に変換するにはgetを使います。

--------------------------------
v.get<string>(); // string
v.get<array>(); // array
v.get<object>(); // object
--------------------------------

またstringはto_str()により、stlのstd::stringが得られるので

--------------------------------
std::string s = v.get<string>().to_str()
--------------------------------

と扱えます。arrayはvector<value>なので

--------------------------------
array a = v.get<array>();
for (array::const_iterator it = a.begin(); it != a.end(); it++) {
cout << it->to_str() << endl;
}
--------------------------------

と書く事が出来ます。objectはmap<std::string, value>なので

--------------------------------
object o = v.get<object>();
for (object::const_iterator it = o.begin(); it != o.end(); it++) {
cout << it->first << "=" << it->second.to_str() << endl;
}
--------------------------------

と書く事が出来ます。jsonの構造が分かっている場合はisを使用せずに書くことも出来ますが、型が異なると実行時例外が発生します。
またシリアライズも出きるので

--------------------------------
v.serialize();
--------------------------------

でJSON文字列が得られます。
サンプルはリポジトリのexamplesディレクトリに入れてありますので、参考になるか分かりませんが見てください。

この質問は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。