json-c中的键名

时间:2015-04-17 23:18:50

标签: c json json-c

我使用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"
}

1 个答案:

答案 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; 
}