cJSON 如何遍历所有对象,获取到未知键名的内容

void josnscan()
{
    char *str = "{\"test\":\"0100\", \"test2\":\"0200#2\",\"test3\":123,\"test4\":[\"0100\", \"0200#2\"]}";

    cJSON *root;
    root = cJSON_Parse(str);
    cJSON *childNode;
    int arraySize = cJSON_GetArraySize(root);
    printf("arraySize %d\n", arraySize);
    int i;
    for(i = 0; i < arraySize; i++)
    {
        childNode = cJSON_GetArrayItem(root, i);
        if(childNode == NULL) continue;
        printf("%d %s\n", childNode->type, childNode->string);
        if(childNode->type == cJSON_String)
        {
            printf("childNode %s\n", childNode->valuestring);
        }
        else if(childNode->type == cJSON_Number)
        {
            printf("childNode %d\n", childNode->valueint);
        }
        else if(childNode->type == cJSON_Array)
        {
            cJSON *tmp;
            int Size = cJSON_GetArraySize(childNode);
            int j;
            for(j = 0; j < Size; j++)
            {
                tmp = cJSON_GetArrayItem(childNode, j);
                if(tmp == NULL) continue;
                printf("tmp %s\n", tmp->valuestring);
            }
        }
    }
}

运行结果

arraySize 4
16 test
childNode 0100
16 test2
childNode 0200#2
8 test3
childNode 123
32 test4
tmp 0100
tmp 0200#2

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cjson是一个轻量级的JSON解析库,用于在C语言中解析和生成JSON数据。要遍历cjson中的所有key,你可以按照以下步骤进行操作: 1. 首先,使用cjson库解析JSON数据并将其转换为cjson对象。你可以使用cjson提供的函数`cJSON_Parse()`来完成这一步骤。 2. 接下来,遍历cjson对象的所有子项。cjson对象可以是一个JSON对象、数组、字符串等。你可以使用cjson提供的函数`cJSON_GetObjectItem()`和`cJSON_GetArrayItem()`来获取对象或数组中的子项。 3. 对于JSON对象,你可以使用`cJSON_GetObjectItem()`函数获取每个key对应的值,并使用`cJSON_GetObjectItemCaseSensitive()`函数来区分大小写。 4. 对于JSON数组,你可以使用`cJSON_GetArrayItem()`函数获取每个索引对应的值。 5. 在遍历过程中,你可以使用`cJSON_ObjectForEach()`函数来遍历JSON对象中的所有key-value对。该函数需要传入一个回调函数,用于处理每个key-value对。 下面是一个示例代码,演示了如何遍历cjson中的所有key: ```c #include <stdio.h> #include "cJSON.h" void print_key_value(const char* key, cJSON* value) { printf("Key: %s\n", key); // 在这里可以根据需要处理value } void traverse_json(cJSON* json) { if (json == NULL) { return; } if (json->type == cJSON_Object) { cJSON* child = NULL; cJSON_ObjectForEach(child, json) { print_key_value(child->string, child); } } } int main() { const char* json_data = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; cJSON* json = cJSON_Parse(json_data); traverse_json(json); cJSON_Delete(json); return 0; } ``` 这段代码将输出JSON对象中的所有key。你可以根据需要在`print_key_value()`函数中添加相应的处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值