共分两个部分,1)创建json、2)解析json
1)创建嵌套json的代码
char * makeJson() { cJSON * pRoot = NULL; cJSON * pSub_1 = NULL; cJSON * pSub_2 = NULL; if((pRoot = cJSON_CreateObject()) == NULL) { return NULL; } if((pSub_1 = cJSON_CreateObject()) == NULL) { return NULL; } if((pSub_2 = cJSON_CreateObject()) == NULL) { return NULL; } cJSON_AddStringToObject(pSub_2, "cStr", "ccccccc"); cJSON_AddStringToObject(pSub_1, "bStr", "bbbbbbb"); cJSON_AddItemToObject(pSub_1, "subobject_2", pSub_2); cJSON_AddStringToObject(pRoot, "aStr", "aaaaaaa"); cJSON_AddItemToObject(pRoot, "subobject_1", pSub_1); cJSON_AddStringToObject(pRoot, "xStr", "xxxxxxx"); //cJSON_PrintUnformatted : make json string for Unformatted //char * pJson = cJSON_PrintUnformatted(pRoot); char * pJson = cJSON_Print(pRoot); if(NULL == pJson) { cJSON_Delete(pRoot); return NULL; } return pJson; }
2)解析json的代码
int parseJson(const char * pJson) { if(NULL == pJson) { return 1; } cJSON * pRoot = cJSON_Parse(pJson); if(NULL == pRoot) { return 2; } cJSON * pSub_1 = cJSON_GetObjectItem(pRoot, "aStr"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 3; } printf("get aStr : [%s] ", pSub_1->valuestring); pSub_1 = cJSON_GetObjectItem(pRoot, "xStr"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 4; } printf("get xStr : [%s] ", pSub_1->valuestring); pSub_1 = cJSON_GetObjectItem(pRoot, "subobject_1"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 5; } printf("get Sub Obj 1 "); cJSON * pSub_2 = cJSON_GetObjectItem(pSub_1, "bStr"); if(NULL == pSub_2) { cJSON_Delete(pRoot); return 6; } printf("get bStr : [%s] ", pSub_2->valuestring); pSub_2 = cJSON_GetObjectItem(pSub_1, "subobject_2"); if(NULL == pSub_2) { cJSON_Delete(pRoot); return 7; } printf("get Obj 2 "); cJSON * pStr = cJSON_GetObjectItem(pSub_2, "cStr"); if(NULL == pStr) { cJSON_Delete(pRoot); return 8; } printf("get cStr : [%s] ", pStr->valuestring); cJSON_Delete(pRoot); return 0; }
3)主函数
int main() { char * pJson = makeJson(); printf("JSON: %s ", pJson); parseJson(pJson); free(pJson); return 0; }
完整的代码请打开下面的代码或到百度网盘下载 http://pan.baidu.com/s/1pJ7KZSR
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h> #include "cJSON.h" char * makeJson() { cJSON * pRoot = NULL; cJSON * pSub_1 = NULL; cJSON * pSub_2 = NULL; if((pRoot = cJSON_CreateObject()) == NULL) { return NULL; } if((pSub_1 = cJSON_CreateObject()) == NULL) { return NULL; } if((pSub_2 = cJSON_CreateObject()) == NULL) { return NULL; } cJSON_AddStringToObject(pSub_2, "cStr", "ccccccc"); cJSON_AddStringToObject(pSub_1, "bStr", "bbbbbbb"); cJSON_AddItemToObject(pSub_1, "subobject_2", pSub_2); cJSON_AddStringToObject(pRoot, "aStr", "aaaaaaa"); cJSON_AddItemToObject(pRoot, "subobject_1", pSub_1); cJSON_AddStringToObject(pRoot, "xStr", "xxxxxxx"); //cJSON_PrintUnformatted : make json string for Unformatted //char * pJson = cJSON_PrintUnformatted(pRoot); char * pJson = cJSON_Print(pRoot); if(NULL == pJson) { cJSON_Delete(pRoot); return NULL; } return pJson; } int parseJson(const char * pJson) { if(NULL == pJson) { return 1; } cJSON * pRoot = cJSON_Parse(pJson); if(NULL == pRoot) { return 2; } cJSON * pSub_1 = cJSON_GetObjectItem(pRoot, "aStr"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 3; } printf("get aStr : [%s] ", pSub_1->valuestring); pSub_1 = cJSON_GetObjectItem(pRoot, "xStr"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 4; } printf("get xStr : [%s] ", pSub_1->valuestring); pSub_1 = cJSON_GetObjectItem(pRoot, "subobject_1"); if(NULL == pSub_1) { cJSON_Delete(pRoot); return 5; } printf("get Sub Obj 1 "); cJSON * pSub_2 = cJSON_GetObjectItem(pSub_1, "bStr"); if(NULL == pSub_2) { cJSON_Delete(pRoot); return 6; } printf("get bStr : [%s] ", pSub_2->valuestring); pSub_2 = cJSON_GetObjectItem(pSub_1, "subobject_2"); if(NULL == pSub_2) { cJSON_Delete(pRoot); return 7; } printf("get Obj 2 "); cJSON * pStr = cJSON_GetObjectItem(pSub_2, "cStr"); if(NULL == pStr) { cJSON_Delete(pRoot); return 8; } printf("get cStr : [%s] ", pStr->valuestring); cJSON_Delete(pRoot); return 0; } int main() { char * pJson = makeJson(); printf("JSON: %s ", pJson); parseJson(pJson); free(pJson); return 0; }
编译
$ gcc -o nestcjson nestcjson.c cjson.c -lm
注:编译时链接的库 -lm 是数学库,不加此库时 gcc 返回错误,错误代码如下
$ gcc -o nestcjson nestcjson.c cjson.c
/tmp/ccugp95L.o: In function `parse_number':
cjson.c:(.text+0x402): undefined reference to `pow'
/tmp/ccugp95L.o: In function `print_number':
cjson.c:(.text+0x512): undefined reference to `floor'
collect2: ld 返回 1
运行
$ ./nestcjson JSON: { "aStr": "aaaaaaa", "subobject_1": { "bStr": "bbbbbbb", "subobject_2": { "cStr": "ccccccc" } }, "xStr": "xxxxxxx" } get aStr : [aaaaaaa] get xStr : [xxxxxxx] get Sub Obj 1 get bStr : [bbbbbbb] get Obj 2 get cStr : [ccccccc]
作者:风波
mail : fengbohello@qq.com