本篇文章是基于这篇文章进行的测试使用,cJSON使用详细教程 | 一个轻量级C语言JSON解析器
Clion的简单介绍
Clion是通过cmake来管理构建项目的,因此我们在创建完一个项目时,会自动生成一个CMakeLists.txt,cmake就是通过这个文件来生成makefile,来构建项目。
我们在Clion上新建一个C语言执行项目
创建完之后,会自动生成一个main.c文件和一个CMakeLists.txt文件。
cJSON使用起来很简单,只需要把cJSON.h和cJSON.c复制到我们的项目中即可。
可以看到项目中总共有4个文件,cJSON.c cJSON.h CMakeists.txt main.c
因为增加了一个源文件(.c文件,.h不算源文件),我们需要修改CMakeists.txt 的内容,初始的CMakeists.txt 内容为
cmake_minimum_required(VERSION 3.21)
project(cjson_prj C)
set(CMAKE_C_STANDARD 99)
add_executable(cjson_prj main.c)
修改之后
cmake_minimum_required(VERSION 3.21)
project(cjson_prj C)
set(CMAKE_C_STANDARD 99)
add_executable(cjson_prj main.c cJSON.c)
之后我们所有的修改都是在main.c中进行。
封装数据和打印数据示例
#include <stdio.h>
#include "cJSON.h"
int main(void)
{
cJSON* cjson_test = NULL;
cJSON* cjson_address = NULL;
cJSON* cjson_skill = NULL;
char* str = NULL;
cjson_test = cJSON_CreateObject();
cJSON_AddStringToObject(cjson_test, "name", "mculover666");
cJSON_AddNumberToObject(cjson_test, "age", 22);
cJSON_AddNumberToObject(cjson_test, "weight", 55.5);
cjson_address = cJSON_CreateObject();
cJSON_AddStringToObject(cjson_address, "country", "China");
cJSON_AddNumberToObject(cjson_address, "zip-code", 111111);
cJSON_AddItemToObject(cjson_test, "address", cjson_address);
cjson_skill = cJSON_CreateArray();
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "C" ));
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Java" ));
cJSON_AddItemToArray(cjson_skill, cJSON_CreateString( "Python" ));
cJSON_AddItemToObject(cjson_test, "skill", cjson_skill);
cJSON_AddFalseToObject(cjson_test, "student");
str = cJSON_Print(cjson_test);
printf("%s\n", str);
return 0;
}
cJSON数据解析
#include <stdio.h>
#include "cJSON.h"
char *message =
"{ \
\"name\":\"mculover666\", \
\"age\": 22, \
\"weight\": 55.5, \
\"address\": \
{ \
\"country\": \"China\",\
\"zip-code\": 111111\
}, \
\"skill\": [\"c\", \"Java\", \"Python\"],\
\"student\": false \
}";
int main(void)
{
cJSON* cjson_test = NULL;
cJSON* cjson_name = NULL;
cJSON* cjson_age = NULL;
cJSON* cjson_weight = NULL;
cJSON* cjson_address = NULL;
cJSON* cjson_address_country = NULL;
cJSON* cjson_address_zipcode = NULL;
cJSON* cjson_skill = NULL;
cJSON* cjson_student = NULL;
int skill_array_size = 0, i = 0;
cJSON* cjson_skill_item = NULL;
cjson_test = cJSON_Parse(message);
if(cjson_test == NULL)
{
printf("parse fail.\n");
return -1;
}
cjson_name = cJSON_GetObjectItem(cjson_test, "name");
cjson_age = cJSON_GetObjectItem(cjson_test, "age");
cjson_weight = cJSON_GetObjectItem(cjson_test, "weight");
printf("name: %s\n", cjson_name->valuestring);
printf("age:%d\n", cjson_age->valueint);
printf("weight:%.1f\n", cjson_weight->valuedouble);
cjson_address = cJSON_GetObjectItem(cjson_test, "address");
cjson_address_country = cJSON_GetObjectItem(cjson_address, "country");
cjson_address_zipcode = cJSON_GetObjectItem(cjson_address, "zip-code");
printf("address-country:%s\naddress-zipcode:%d\n", cjson_address_country->valuestring, cjson_address_zipcode->valueint);
cjson_skill = cJSON_GetObjectItem(cjson_test, "skill");
skill_array_size = cJSON_GetArraySize(cjson_skill);
printf("skill:[");
for(i = 0; i < skill_array_size; i++)
{
cjson_skill_item = cJSON_GetArrayItem(cjson_skill, i);
printf("%s,", cjson_skill_item->valuestring);
}
printf("\b]\n");
cjson_student = cJSON_GetObjectItem(cjson_test, "student");
if(cjson_student->valueint == 0)
{
printf("student: false\n");
}
else
{
printf("student:error\n");
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)