一、前言
在使用嵌入式系统做项目时,碰见了使用JSON格式数据的需求,所以需要移植cJSON库进行组织和解析数据。
二、移植
cJSON的github地址:https://github.com/DaveGamble/cJSON
,可以在git仓库中直接clone代码下来:git clone https://github.com/DaveGamble/cJSON.git
,此外还可以直接cJSON官网下载。
下载完成之后,我们需要得到cJSON.c cJSON.h
这两个文件,然后把这个文件复制到工程里面,头文件引用到cJSON.h
的正确路径。
三、常用函数
1.cJSON *cJSON_Parse(const char *value)
从给定的json字符串中得到cjson对象
2.cJSON *cJSON_GetObjectItemCaseSensitive(const cJSON * const object,const char * const string)
用于从一个已解析的JSON对象中查找指定键的值,对键名的匹配区分大小写
3.int cJAON_GetArraySize(const cJSON *array)
获取cjson对象数组成员的个数
4.cJSON * cJSON_GetArrayItem(const vcJSON *array, int index)
根据下标获取cjosn对象数组中的对象
5.const char *cJSON_GetErrorPtr(void)
获取错误字符串
void cJSON_Delete(cJSON *item)
删除cjson对象,释放链表占用的内存空间
四、代码案例
#include "cJSON.h"
void parse_code(char *json_str)
{
cJSON *root = cJSON_Parse(json_str);//获取json对象
if(root==NULL)
{
printf("Error before:[%s]\n",cJSON_GetErrorPtr());
}
else
{
//解析字符串型键值对
const char *game= cJSON_GetObjectItemCaseSensitive(root,"game")->valuestring;
if(strcmp(game,"Basketball")==0)
{
//game值为Basketball实现的操作
}
//解析字符串数组键值对
cJSON *class_array = cJSON_GetObjectItemCaseSensitive