JSON:JavaScript Object Notation,一种数据交互格式。
cJSON:C 语言实现,用于封装和解析 json 数据。
cJSON开源地址:https://github.com/DaveGamble/cJSON
{
"name":"sdc",
"age":24,
"height":1.78
}
enum json_print_formate
{
JSON_OUT_FORMATE = 0, /*按 json 格式输出*/
JSON_OUT_UNFORMATE, /*以字符串形式输出*/
};
char *json_package(enum json_print_formate flag)
{
cJSON *root = NULL;
char *out = NULL;
root =cJSON_CreateObject(); /*根*/
cJSON_AddStringToObject(root, "name", "sdc"); /*添加字符串*/
cJSON_AddNumberToObject(root, "age", 24); /*添加整型*/
cJSON_AddNumberToObject(root, "height", 1.78); /*添加浮点型*/
if(JSON_OUT_FORMATE == flag)
{
out = cJSON_Print(root);
}
else
{
out = cJSON_PrintUnformatted(root);/*将json形式打印成正常字符串形式*/
}
/*释放内存*/
cJSON_Delete(root);
return out;
}
void json_parse(char *json_string)
{
cJSON *root = NULL;
cJSON *name = NULL;
cJSON *age = NULL;
cJSON *height = NULL;
root = cJSON_Parse(json_string); /*解析成json形式*/
name = cJSON_GetObjectItem(root, "name"); /*获取键值内容*/
age = cJSON_GetObjectItem(root, "age");
height = cJSON_GetObjectItem(root, "height");
printf("name:%s,age:%d,height:%f\n", name->valuestring, age->valueint, height->valuedouble);
/*释放内存*/
cJSON_Delete(root);
}
#include
#include
#include
#include"cJSON.h"
int main()
{
char *json_str = NULL;
json_str = json_package(JSON_OUT_FORMATE);
printf("formate:\n%s\n", json_str);
json_parse(json_str);
cJSON_free(json_str);
json_str = json_package(JSON_OUT_UNFORMATE);
printf("unformate:%s\n", json_str);
json_parse(json_str);
cJSON_free(json_str);
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(json_test)
include_directories(./)
aux_source_directory(./ SRC_FILES)
add_executable(${PROJECT_NAME} ${SRC_FILES})
formate:
{
"name": "sdc",
"age": 24,
"height": 1.78
}
name:sdc,age:24,height:1.780000
unformate:{"name":"sdc","age":24,"height":1.78}
name:sdc,age:24,height:1.780000
Note:
cJSON_Print(const cJSON *item) 和 cJSON_PrintUnformatted(const cJSON *item) 这两个函数会调用 malloc 分配内存,需要调用 cJSON_free(void *object) 进行释放。 下一篇