JSON-C docsを見ると、簡単に構造をドリルダウンすることはできません。あなたはそれを自分で行う必要があります。
struct json_object *json_object_get_with_keys(
struct json_object *obj,
const char *keys[]
) {
while(keys[0] != NULL) {
if(!json_object_object_get_ex(obj, keys[0], &obj)) {
fprintf(stderr, "Can't find key %s\n", keys[0]);
return NULL;
}
keys++;
}
return obj;
}
nullで終了するキー配列を渡すと、ドリルダウン(またはnull)されます。
const char *keys[] = {"scores", "math", "highest", NULL};
struct json_object *obj = json_object_get_with_keys(top, keys);
if(obj != NULL) {
printf("%s\n", json_object_to_json_string(obj));
}
代わりに、JSON-Glibを使用しています。それはJSONPathよりよく知られているでしょう、あなたは$.scores.english.highest
を使用することができます。
JsonNode *result_node = json_path_query(
"$.scores.english.highest",
json_parser_get_root(parser),
&error
);
if(error != NULL) {
fprintf(stderr, "%s", error->message);
exit(1);
}
/* It returns a node containing an array. Why doesn't it just return an array? */
JsonArray *results = json_node_get_array(result_node);
if(json_array_get_length(results) == 1) {
printf("highest: %ld\n", json_array_get_int_element(results, 0));
}
else {
fprintf(stderr, "Couldn't find it\n");
}
これを使うのはちょっと厄介ですが、あなたは、いくつかのラッパー関数と簡単には足場とエラーハンドリングの世話をすることを確認することができます。
私はあなたが基本的なJavascriptと連想配列について学ぶ必要があると思います。 –
JavascriptとJSONの使い方を知っています。私はどのようにC @ JSONの実装であるjson-cを使用して(最も単純な方法で)値にアクセスするかを尋ねています。 – Phil
次に、Javascriptで連想配列について知っていますか?だから、Javascriptプログラムでは、どのようにリストのこれらの要素にアクセスしますか? C APIで同様のことを試してみたらどうでしょう? –