本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据。2)创建json数组和解析json数组
1、创建json,从json中获取数据
- 1 #include <st@R_502_410@.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