Bootstrap

嵌入式Linux移植cJSON库

一、前言

  在使用嵌入式系统做项目时,碰见了使用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
;