esp8266 sdk开发②JSON数据创建和解析

1.JSON简介
JSON是一种轻量级的数据交换格式。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2.JSON语法
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:
对象表示为键值对
数据由逗号分隔
花括号保存对象
方括号保存数组
3.举例
{
“results”: [{
“number”: 2
“name”: “milk”
}]
}
number是键名,2是值(整型),name是键名,milk是值(字符串型),中括号表示数组。
4.程序分析
虽然SDK有封装好的cjson库,但是我这用更为熟悉的自己的cjson库。之前看的别人的博客,都没有对数组进行解析,所以这里主要是为了如何来解析数组。
①创建并解析json

void ICACHE_FLASH_ATTR parseJson() {
/*
解析以下一段json数据
{
	"results":	[{
			"number":	2
			"name":	"milk"
		}]
}
*/
	//首先创建一个json数据
	u8* jsonRoot ="{\"results\":[{\"number\":2,\"name\":\"milk\"}]}";

	//首先整体判断是否为一个json格式的数据
	cJSON *pJsonRoot = cJSON_Parse(jsonRoot);
	//如果是否json格式数据
	if (pJsonRoot !=NULL) {
        //串口打印这段数据
		char *s = cJSON_Print(pJsonRoot);
		os_printf("pJsonRoot: %s\r\n", s);
		cJSON_free((void *) s);
        //由外至内解析
		cJSON *resules = cJSON_GetObjectItem(pJsonRoot, "results");
		//判断是否是json数据
		if(resules)
		{
			//得到数组长度
			int i=cJSON_GetArraySize(pJsonRoot);
			//解析数组
		    cJSON *pAdress = cJSON_GetArrayItem(resules, 0);
		    //判断
			if(pAdress)
			{
				        //解析number字段int内容
						cJSON *pNumber = cJSON_GetObjectItem(pAdress, "number");
						//判断number字段是否存在
						if (pNumber){
							if (cJSON_IsNumber(pNumber))
							os_printf("get Number:%d \n", pNumber->valueint);
						}
						else
							os_printf("get Number failed \n");
						//剖析里面的name字段 char
						cJSON *pName = cJSON_GetObjectItem(pAdress, "name");
						if (pName)
						{
							if (cJSON_IsString(pName))
								os_printf("get Name : %s \n", pName->valuestring);
						}
						else
							os_printf("get Name failed\n");
			}
		}

	} else {
		os_printf("this is not a json data ... \n");
	}
	cJSON_Delete(pJsonRoot);
}

②用库函数创建json

void creatJson(){

/*
{
	"results":	[{
			"number":	2
			"name":	"milk"
		}]
}
 */
	//从里向外创建
	cJSON *pRoot = cJSON_CreateObject();
	cJSON *pVal = cJSON_CreateArray();
    cJSON *pValue = cJSON_CreateObject();
	//创建number和name
    cJSON_AddNumberToObject(pRoot,"number",2);
    cJSON_AddStringToObject(pRoot,"name","milk");
    //
	cJSON_AddItemToArray(pVal,pRoot);
	cJSON_AddItemToObject(pValue,"results",pVal);

	char *s = cJSON_Print(pValue);
	os_printf("\r\n creatJson : %s\r\n", s);
	cJSON_free((void *) s);

	cJSON_Delete(pValue);
}

5.实验现象
在这里插入图片描述
6.程序源码
链接:https://pan.baidu.com/s/1mliLxneBhw8-Uhm9qq1fnQ
提取码:i2na

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ma lidong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值