cJsonFiles数据结构

先看json的数据结构

c中没有对象,所以json数据是采用链表存储的

view source print ?
01. typedef struct cJSON {
02. struct cJSON *next,*prev;    // 数组 对象数据中用到
03. struct cJSON *child;        // 数组 和对象中指向子数组对象或值
04.   
05. int type;            // 元素的类型,如是对象还是数组
06.   
07. char *valuestring;            // 如果是字符串
08. int valueint;                // 如果是数值
09. double valuedouble;            // 如果类型是cJSON_Number
10.   
11. char *string;                // The item's name string, if this item is the child of, or is in the list of subitems of an object.
12. } cJSON;

比如你有一个json数据

view source print ?
01. {
02. "name": "Jack (\"Bee\") Nimble",
03. "format": {
04. "type":       "rect",
05. "width":      1920,
06. "height":     1080,
07. "interlace":  false,
08. "frame rate": 24
09. }
10. }

那么你可以

1:讲字符串解析成json结构体。

cJSON *root = cJSON_Parse(my_json_string);
2:获取某个元素

cJSON *format = cJSON_GetObjectItem(root,”format”);

int framerate = cJSON_GetObjectItem(format,”frame rate”)->valueint;

3:讲json结构体转换成字符串

char *rendered=cJSON_Print(root);

4:删除

cJSON_Delete(root);

5:构建一个json结构体

view source print ?
01. cJSON *root,*fmt;
02. root=cJSON_CreateObject();
03. cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
04. cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());
05. cJSON_AddStringToObject(fmt,"type",        "rect");
06. cJSON_AddNumberToObject(fmt,"width",        1920);
07. cJSON_AddNumberToObject(fmt,"height",        1080);
08. cJSON_AddFalseToObject (fmt,"interlace");
09. cJSON_AddNumberToObject(fmt,"frame rate",    24);

 


你可能感兴趣的:(cJsonFiles数据结构)