json-c 中的键名

Key names in 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; 
}

使用 json_object_get_ex 从键 "a" 获取值的正确键名是什么?

我所拥有的对于上面的 JSON 不起作用(对于两个查询,exists 都是假的),但它对下面的 JSON 起作用。我敢肯定,这与对 "path" 和 "a" 使用哪个键的误解有关。

{      
   "a": "1",
   "b": "2",
   "c": "3"
}

好的,我明白了,就像我说的,我误解了 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; 
}