我使用json-c解析以下JSON字符串:
{
"root": {
"a": "1",
"b": "2",
"c": "3"
}
}
而且,我有以下C代码。上面的JSON存储在变量b。
中json_object *new_obj, *obj1, *obj2;
int exists;
new_obj = json_tokener_parse(b);
exists=json_object_object_get_ex(new_obj,"a",&obj1);
if(exists==false) {
printf("key \"a\" not found in JSON");
return;
}
exists=json_object_object_get_ex(new_obj,"b",&obj2);
if(exists==false) {
printf("key \"b\" not found in JSON");
return;
}
用于从key" a"获取值的正确密钥名称是什么?使用json_object_get_ex?
对于我上面提到的JSON,我所做的工作(两个查询都存在false),但它确实适用于以下JSON。我确定这与误解用于"路径"键入" a"。
{
"a": "1",
"b": "2",
"c": "3"
}
答案 0 :(得分:1)
好吧,我想通了,就像我说我误解了json-c如何解析原始JSON文本并将其表示为父节点和子节点。
以下代码正常运行。问题是我试图从原来的json_object获取子节点,这是不正确的。我首先必须获取根对象,然后从根获取子对象。
json_object *new_obj, *root_obj, *obj1, *obj2;
int exists;
new_obj = json_tokener_parse(b);
exists=json_object_object_get_ex(new_obj,"root",&root_obj);
if(exists==false) {
printf("\"root\" not found in JSON");
return;
}
exists=json_object_object_get_ex(root_obj,"a",&obj1);
if(exists==false) {
printf("key \"a\" not found in JSON");
return;
}
exists=json_object_object_get_ex(root_obj,"b",&obj2);
if(exists==false) {
printf("key \"b\" not found in JSON");
return;
}