janssonを使ってみた。
JSONの処理は、picojsonを使っていましたが、いろいろ悩むことがあり、janssonに変更中です。
janssonは、APIのドキュメントがあるのが良いです。
■ヘッダ
#include <jansson.h>
■ライブラリ
jansson.lib
■ファイルを開く
json_t *result = json_load_file("json.db", 0, &error);
if (result == NULL) {
fputs(error.text, stderr);
return 0;
}
■オブジェクトを開く
json_t *JO1 = json_object_get(result, "roots");
if (JO1 == NULL) {
printf("JO1 is NULL\n");
return 0;
}
■オブジェクトの確認
//オブジェクトの判定test
if (json_is_null(JO2) == 1){
printf("NULL\n");
}
if (json_is_object(JO2) == 1){
printf("object\n");
}
if (json_is_integer(JO2) == 1){
printf("integer\n");
}
if (json_is_array(JO2) == 1){
printf("array\n");
}
if (json_is_string(JO2) == 1){
printf("string\n");
}
■Arrayの値の読み出し
json_t *JO3;
JO3 = json_object_get(JO2, "children");
if (JO3 == NULL) {
printf("JO3 is NULL\n");
return 0;;
}
json_t *JO4;
json_array_foreach(JO3, i, JO4) {
printf("%s/%s: %s\n",
json_string_value(json_object_get(JO4, "name")),
json_string_value(json_object_get(JO4, "url")));
}
■オブジェクトの一覧をループ
keyに名前が入り、valueが新しいオブジェクト
json_t *value;
const char *key;
json_object_foreach(JObj,key,value){
printf("key:%s\n",key);
}