嵌套 JSON 对象

嵌套 JSON 对象

JSON的字符串格式有要求
dfs{…}sd
在{ }的前面和后面多了字符都不行,还有其他的要求,就不一一列举了
可以用下面的连接来验证一下你的字符串是否符合Json
链接: JSON在线解析http://www.json.cn/
比如,我要解释的字符串是

p = 
{
    "method":"thing.service.property.set",
    "id":"1521341546",
    "params":{
        "LightSwitch":1
    },
    "version":"1.0.0",
    "resInfo":[
        {
            "minDistance":0,
            "maxDistance":2
        }
    ]
}

其中 params resInfo是嵌套的对象

1. cJSON * pSub_1 = cJSON_Parse( p )

作用:将一个JSON数据包,按照cJSON结构体的结构序列化整个数据包,并在堆中开辟一块内存存储cJSON结构体
返回值:成功返回一个指向内存块中的cJSON的指针,失败返回NULL

	//按照cJSON结构体的结构序列化整个数据包
	cJSON * pSub_1  = cJSON_Parse(p);

2. 解析第一层上的"id"的值是多少

	//按照cJSON结构体的结构序列化整个数据包
	cJSON * pSub_1  = cJSON_Parse(p);
	if(pSub_1  != NULL)
	{		
		//在pSub_1中查找"id"(字符串)
		json_timestamp = cJSON_GetObjectItem(pSub_1 , "id");
	    if(json_timestamp->type == cJSON_String)
	    {
			printf("id:%s\n", json_timestamp->valuestring);
	    }
	}

printf串口输出 id:1521341546

3. 解释第二层上的"LightSwitch"的数值是多少

	//按照cJSON结构体的结构序列化整个数据包
	cJSON * pSub_1  = cJSON_Parse(p);
	if(pSub_1  != NULL)
	{		
		//在pSub_1中查找"params",嵌套到pSub_2(第二层)
		cJSON * pSub_2 = cJSON_GetObjectItem(pSub_1 , "params");
		
		//在pSub_2中查找"LightSwitch"(整型数值)
		json_timestamp = cJSON_GetObjectItem(pSub_2, "LightSwitch");
	    if(json_timestamp->type == cJSON_Number)
	    {
			printf("LightSwitch:%d\n", json_timestamp->valueint);
	    }
	}

printf串口输出 LightSwitch:1

4.获取数组里面的元素 resInfo
cJSON * pSub_1  = cJSON_Parse(p);
if(pSub_1  != NULL)
{
	cJSON *object = cJSON_GetArrayItem(pSub_1  , 0);// 数组里的第0个元素
	if (object != NULL)
	{
		cJSON *item = cJSON_GetObjectItem(object, "minDistance");
		if (item != NULL && item->type == cJSON_Number)
		{
			printf("minDistance:%d\n", item ->valueint);
		}
	}
}

printf串口输出 minDistance:0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值