1、json库下载
GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C
cmake .编译、 make编译,保留cJSON.h和libcjson.a文件
项目CMakeLists.txt引入:
include_directories("/Users/sumengnan/CLionProjects/testc/include")
link_directories("/Users/sumengnan/CLionProjects/testc/lib")
target_link_libraries(testc libcjson.a)
2、json对象转字符串
#include "cJSON.h"
//json转字串
//1、创建JSONObject
cJSON *root = cJSON_CreateObject();
//相似的创建json对象还有如下……
// cJSON_CreateArray();
// cJSON_CreateNull();
// cJSON_CreateString();
// cJSON_CreateNumber();
//2、创建子object
//创建json string对象
cJSON_AddItemToObject(root,"username", cJSON_CreateString("sumengnan"));
cJSON_AddStringToObject(root,"pass","123456");
//创建json数组对象
cJSON *array = cJSON_CreateArray();
cJSON_AddItemToArray(array, cJSON_CreateString("a"));
cJSON_AddItemToArray(array, cJSON_CreateString("b"));
cJSON_AddItemToArray(array, cJSON_CreateString("c"));
cJSON_AddItemToObject(root,"letter",array);
char *string = cJSON_Print(root);
printf("%s\n",string);
//释放内存
cJSON_Delete(root);
执行结果:
{
"username": "sumengnan",
"pass": "123456",
"letter": ["a", "b", "c"]
}
3、字符串转json对象
char *a="{\"errNo\":\"403\",\"data\": { \"redDot\": [ \"a\",\"b\",\"c\" ], \"newWord\": [ ], \"layer\": [ ] }}";
cJSON *root = cJSON_Parse(a);
//获取errNo对象
cJSON *errNoJson = cJSON_GetObjectItem(root, "errNo");
printf("errNoJson:%s\n",cJSON_GetStringValue(errNoJson));
//获取data->redDot数组对象
cJSON *dataJson = cJSON_GetObjectItem(root, "data");
cJSON *redDotJson = cJSON_GetObjectItem(dataJson, "redDot");
for(int i=0;i<cJSON_GetArraySize(redDotJson);i++){
cJSON *redDotItemJson = cJSON_GetArrayItem(redDotJson, i);
printf("redDotJson:%d:%s\n",i, cJSON_GetStringValue(redDotItemJson));
}
执行结果:
errNoJson:403
redDotJson:0:a
redDotJson:1:b
redDotJson:2:c