本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据。2)创建json数组和解析json数组
1、创建json,从json中获取数据
1 #include <stdio.h> 2 #include "cJSON.h" 3 4 char * makeJson() 5 { 6 cJSON * pJsonRoot = NULL; 7 8 pJsonRoot = cJSON_CreateObject(); 9 if(NULL == pJsonRoot) 10 { 11 //error happend here 12 return NULL; 13 } 14 cJSON_AddStringToObject(pJsonRoot,hello",0); line-height:1.5!important">hello world"); 15 cJSON_AddNumberToObject(pJsonRoot,0); line-height:1.5!important">number10010); 16 cJSON_AddBoolToObject(pJsonRoot,0); line-height:1.5!important">bool1); 17 cJSON * pSubJson = NULL; 18 pSubJson = cJSON_CreateObject(); 19 if(NULL == pSubJson) 20 { 21 create object faild,exit 22 cJSON_Delete(pJsonRoot); 23 24 } 25 cJSON_AddStringToObject(pSubJson,0); line-height:1.5!important">subjsonobja sub json string 26 cJSON_AddItemToObject(pJsonRoot,0); line-height:1.5!important">subobj",pSubJson); 27 28 char * p = cJSON_Print(pJsonRoot); 29 else use : 30 char * p = cJSON_PrintUnformatted(pJsonRoot); 31 if(NULL == p) 32 { 33 convert json list to string faild,exit 34 because sub json pSubJson han been add to pJsonRoot,so just delete pJsonRoot,if you also delete pSubJson,it will coredump,and error is : double free 35 cJSON_Delete(pJsonRoot); 36 37 } 38 free(p); 39 40 cJSON_Delete(pJsonRoot); 41 42 return p; 43 } 44 45 void parseJson(char * pMsg) 46 { 47 if(NULL == pMsg) 48 { 49 return; 50 } 51 cJSON * pJson = cJSON_Parse(pMsg); 52 if(NULL == pJson) 53 { 54 parse faild,return 55 return ; 56 } 57 58 get string from json 59 cJSON * pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 60 if(NULL == pSub) 61 { 62 get object named "hello" faild 63 } 64 printf(obj_1 : %s\nvaluestring); 65 66 get number from json 67 pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 68 69 { 70 get number from json faild 71 } 72 printf(obj_2 : %d\nvalueint); 73 74 get bool from json 75 pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 76 77 { 78 get bool from json faild 79 } 80 printf(obj_3 : %d\n 81 82 get sub object 83 pSub = cJSON_GetObjectItem(pJson,128); line-height:1.5!important"> 84 85 { 86 get sub object faild 87 } 88 cJSON * pSubSub = cJSON_GetObjectItem(pSub,128); line-height:1.5!important"> 89 if(NULL == pSubSub) 90 { 91 get object from subject object faild 92 } 93 printf(sub_obj_1 : %s\nvaluestring); 94 95 cJSON_Delete(pJson); 96 } 97 98 int main() 99 { 100 char * p = makeJson(); 101 102 { 103 return 0; 104 } 105 printf(%s\n106 parseJson(p); 107 free(p); //千万不要忘记释放内存呀,cJSON_Print()函数或者cJSON_PrintUnformatted()产生的内存,使用free(char *)进行释放 108 109 }
centos下编译通过,运行结果如下
1 {
2 ": 3 10010,128); line-height:1.5!important"> 4 ": true,128); line-height:1.5!important"> 5 ": {
6 7 }
8 }
9 obj_1 : hello world
10 obj_2 : 10010
11 obj_3 : 1
12 sub_obj_1 : a sub json string