stm32 cjson 解析

一、cjson结构体:

typedef struct cJSON {

       struct cJSON*next,*prev;           /* 遍历数组或对象链的前向或后向链表指针*/

       struct cJSON *child;                   /*数组或对象的孩子节点*/

       int type;                                     /* key的类型*/

       char *valuestring;                       /*字符串值*/

       int valueint;                                /* 整数值*/

       double valuedouble;                    /* 浮点数值*/

       char *string;                               /* key的名字*/

} cJSON;

说明:

1、cJSON是使用链表来存储数据的,其访问方式很像一颗树。每一个节点可以有兄弟节点,通过next/prev指针来查找,它类似双向链表;每个节点也可以有孩子节点,通过child指针来访问,进入下一层。只有节点是对象或数组时才可以有孩子节点。

2、type是键(key)的类型,一共有7种取值,分别是:False,Ture,NULL,Number,String,Array,Object。

若是Number类型,则valueint或valuedouble中存储着值。若期望的是int,则访问valueint,若期望的是double,则访问valuedouble,可以得到值。

若是String类型的,则valuestring中存储着值,可以访问valuestring得到值。

3、string中存放的是这个节点的名字,可理解为key的名称。

二、使用方法
包含头文件 #include“cJSON.h”

1、首先调用cJSON_Parse()函数,解析JSON数据包
cJSON*root=cJSON_Parse(json_string);

2、调用cJSON_GetObjectItem()函数
cJSON*item=cJSON_GetObjectItem(root,”firstName”);

(3) 如果需要使用cJSON结构体中的内容,可通过cJSON结构体中的valueint和valuestring取出有价值的内容(即键的值),

(4) 通过cJSON_Delete(),释放cJSON_Parse()分配出来的内存空间。
cJSON_Delete(root);

三、解析

例如:

char json_string[] ={"
{
 "person":
     {
         "firstName":"z",
         "lastName":"jadena",
         "email":"jadena@126.com",
         "age":8,
         "height":1.17
     }       
}
"}

1、cJSON*root=cJSON_Parse(json_string); // 解析json;
2、cJSON *firstName=cJSON_GetObjectItem(root,”person”); //解析firstName

你可能感兴趣的:(日常工作记录)