cJSON获取json数据的所有的key

小记

使用cJSON实现获取json数据中所有的key的值,然后对key值做相应的处理操作

笔记

首先先看了一下cJSON的结构体,是链表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// cJSON结构体:

typedef struct cJSON {<!-- -->

     struct cJSON *next,*prev;   // next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem

     struct cJSON *child;        // An array or object item will have a child pointer pointing to a chain of the items in the array/object.

     int type;                   // The type of the item, as above.

     char *valuestring;          // The item's string, if type==cJSON_String

     int valueint;               // The item's number, if type==cJSON_Number

     double valuedouble;         // The item's number, if type==cJSON_Number

     char *string;               // The item's name string, if this item is the child of, or is in the list of subitems of an object.

} cJSON;

包含了key以及指向下一个结点的指针
那么就直接遍历链表就好了

实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
#include "cJSON.h"
#include "pub_function.h"
int main(){<!-- -->
    cJSON * test_json;
    char *content=read_json("./testjson.json");
    test_json=cJSON_Parse(content);
    cJSON * testitem_json=cJSON_GetObjectItem(test_json,"device_type");
    while (testitem_json->next!=NULL)
    {<!-- -->
        printf("%s\n",testitem_json->string);
        testitem_json=testitem_json->next;
    }
}

运行结果:
在这里插入图片描述
json文件:

1
2
3
4
5
6
7
8
{<!-- -->
    "device_type":  "WSD_General",
    "modal_type":   "WSD",
    "device_name":  "SNMP网络路由",
    "address":  "192.168.32.2",
    "get_community":    "public",
    "set_community":    "public"
}