cJSON获取json数据的所有的key

小记

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

笔记

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

// 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以及指向下一个结点的指针
那么就直接遍历链表就好了

实现如下:

#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文件:

{
	"device_type":	"WSD_General",
	"modal_type":	"WSD",
	"device_name":	"SNMP网络路由",
	"address":	"192.168.32.2",
	"get_community":	"public",
	"set_community":	"public"
}
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页