cJSON的使用

cJSON是一个仅有一个.h文件,一个.c文件组成的JSON解析器,它是由纯C(ANSI C89)实现的,跨平台性较好。cJSON是采用链表存储的。
表示:
以"{“开始,以”}"结束
数据在键/值对中;
数据由逗号分开;
花括号保存对象;
方括号保存数组;
JSON两种结构:
对象:对象在js中表示为“{}”括起来的内容,数据结构为{key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值.

数组:数组在js中是中括号“[]”括起来的内容,数据结构为[“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取。

下载cJSON库

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#pragma comment(lib,"cjson.lib")
#include "cJson/include/cJSON.h"

void  Inspect(char* OutBuf)
{
	/* 创建一个JSON数据对象(链表头结点) */
	cJSON *cjson_root = cJSON_CreateObject();

	/* 添加一条字符串类型的JSON数据(添加一个链表节点) */
	cJSON_AddStringToObject(cjson_root, "Dev", "设备1");

	/* 添加一条整数类型的JSON数据(添加一个链表节点) */
	//cJSON_AddNumberToObject(cjson_test, "age", 22);

	cJSON_AddStringToObject(cjson_root, "Side", "Front");

	cJSON* ObjFirst = cJSON_CreateObject();
	cJSON_AddStringToObject(ObjFirst, "name", "极耳宽度");
	cJSON_AddNumberToObject(ObjFirst, "number1", 5);
	cJSON_AddNumberToObject(ObjFirst, "number2", 6);

	cJSON* ObjScnd = cJSON_CreateObject();
	cJSON_AddStringToObject(ObjScnd, "name", "陶瓷高度");
	cJSON_AddNumberToObject(ObjScnd, "number1", 2);
	cJSON_AddNumberToObject(ObjScnd, "number2", 3);
	//把对象添加到数组
	cJSON* ObjArr = cJSON_CreateArray();
	cJSON_AddItemToArray(ObjArr, ObjFirst);
	cJSON_AddItemToArray(ObjArr, ObjScnd);

	cJSON_AddItemToObject(cjson_root, "Type", ObjArr);

	/* 打印JSON对象(整条链表)的所有数据 */
	char *str = cJSON_Print(cjson_root);

	strcpy(OutBuf, str);
	printf("%s\n", str);

	cJSON_Delete(cjson_root);
}

int JiexiInspect(char* message)
{		
	/* 解析整段JSO数据 */
	cJSON *cjson_root = cJSON_Parse(message);
	if (cjson_root == NULL)
	{
		printf("parse fail.\n");
		return -1;
	}

	/* 依次根据名称提取JSON数据(键值对) */
	cJSON *cjson_Dev = cJSON_GetObjectItem(cjson_root, "Dev");
	cJSON* cjson_Side = cJSON_GetObjectItem(cjson_root, "Side");
	
	printf("Dev: %s\n", cjson_Dev->valuestring);
	printf("Side:%s\n", cjson_Side->valuestring);

	/* 解析数组 */
	cJSON * cjson_Type = cJSON_GetObjectItem(cjson_root, "Type");
	if (cJSON_IsArray(cjson_Type))
	{
		int array_size = cJSON_GetArraySize(cjson_Type);
		printf("array size:%d\n", array_size);
		for (int i = 0;i< array_size;i++)
		{
			cJSON* SubObj = cJSON_GetArrayItem(cjson_Type, i);
			if (NULL == SubObj)
			{
				continue;
			}
			printf("[%d]name:%s\number1:%d\number2:%d\n", i, \
				cJSON_GetObjectItem(SubObj, "name")->valuestring, \
				cJSON_GetObjectItem(SubObj, "number1")->valueint, \
				cJSON_GetObjectItem(SubObj, "number2")->valueint);
			
		}
	}
	
	cJSON_Delete(cjson_root);
	return 0;

}

int main()
{
	char outbuf[512] = { 0 };
	Inspect(outbuf);
	cout << endl;
	JiexiInspect(outbuf);

	system("pause");
	return 0;
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值