如何使用cJSON在名称/值对中查找名称

如何使用cJSON在名称/值对中查找名称,c,cjson,C,Cjson,cJSON提供了一个函数 CJSON\u PUBLIC(CJSON*)CJSON\u GetObjectItemCaseSensitive(常量CJSON*常量对象,常量字符*常量字符串) 我创建了一个测试函数 #include "cJSON.h" const char *jsonstring = "{\"b\": {\"b1\":\"2b\"}}"; void jsontest(void) { cJSON *cJSON_data = cJSON_Parse(jsonstring);

cJSON提供了一个函数

CJSON\u PUBLIC(CJSON*)CJSON\u GetObjectItemCaseSensitive(常量CJSON*常量对象,常量字符*常量字符串)

我创建了一个测试函数

#include "cJSON.h"
const char *jsonstring = "{\"b\": {\"b1\":\"2b\"}}";

void jsontest(void)
{
  cJSON *cJSON_data = cJSON_Parse(jsonstring);
  char *buffer = cJSON_Print(cJSON_data);
  printf("JSON_String:%s\r\n",buffer);
  cJSON *bfound = cJSON_GetObjectItemCaseSensitive(cJSON_data,"b1");
  printf("bfound: 0x%08x\n",(char*)bfound);
  free(cJSON_data);
  free(buffer);
}
输出是

JSON_String:{
    "b":    {
        "b1":   "2b"
    }
}

bfound: 0x00000000
`

如果我用这个字符串

const char*jsonteststr1=“{\'a\':\'1\'、\'b\':\'2\'、\'c\':\'3\'”

GetObjectItemCaseSensitive()
将找到“a”、“b”和“c”

GetObjectItemCaseSensitive()
似乎不会递归

我做错什么了吗?我不明白如何使用
GetObjectItem()


我使用的是1.7.12版

cJSON_GetObjectItemCaseSensitive(object,string)
只能获取对象的直接子节点和子节点的兄弟节点,我们无法通过它找到子节点

如果要获取
2b
的值,则应:

#包括“cJSON.h”
const char*jsonstring=“{\'b\':{\'b1\':\'2b\'}”;
void jsontest(void)
{
cJSON*cJSON_data=cJSON_Parse(jsonstring);
字符*缓冲区=cJSON_打印(cJSON_数据);
printf(“JSON_字符串:%s\r\n”,缓冲区);
cJSON*bfound=cJSON_GetObjectItemCaseSensitive(cJSON_数据,“b”);//cJSON_数据只有一个名为“b”的子级
cJSON*b1_found=cJSON_GetObjectItemCaseSensitive(bfound,“b1”);//键/值:在b1_found中,而不是bfound中
printf(“b1\u找到:0x%08x\n”,(char*)b1\u找到);
printf(“bfound:0x%08x\n”,(char*)bfound);
cJSON_Delete(cJSON_data);//应该使用cJSON_Delete释放json项。
自由(缓冲);
}

使用
%p
格式说明符打印内存地址。并强制转换为
无效*
。感谢您对编码的评论。,