添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

特殊的无key值的json数组今天遇到了,所以研究了会才知道怎么生成和解析这种无键值的json数组。下面我们来看看今天的实验。

2.json生成数组实验

今天的实验就是生成这样的无key值的json数组,在这里称为数组1。

"scanPrefix": [ "hello", "hello", "hello", "hello", "hello"

我们再来看看正常一点的有 key值的json数组 ,在这里称为数组2。

"scanPrefix":[ {"H":"hello"}, {"H":"hello"}, {"H":"hello"}, {"H":"hello"}, {"H":"hello"}

上述json数组区别在于有无键值,即有无key值json数组。

来看看数组1的生成方式:

uint16_t  protocol_Respond_Array0(uint8_t *pRcvBufferOut, uint16_t nlen)
	uint16_t ni = 0;
	uint16_t nsize			= 0;
	char *data_str			= NULL;
	char *response_str		= NULL;
	cJSON *response_root		= NULL;
	//生成Json数据格式
	response_root = cJSON_CreateObject();
	cJSON *scanPrefixArray = cJSON_CreateArray();
	cJSON_AddItemToObject(response_root, "scanPrefix", scanPrefixArray);
	for(ni = 0; ni <5 ; ni++)
		if(ni%2==0)
			cJSON_AddStringToObject(scanPrefixArray, "NULL","hello");
			cJSON_AddStringToObject(scanPrefixArray, "NULL","hi");
	response_str = cJSON_Print(response_root);
	nsize = strlen(response_str);
	if(pRcvBufferOut != NULL)
		memcpy(pRcvBufferOut, response_str, nsize);
	if(NULL !=response_root) cJSON_Delete(response_root);
	if(NULL !=response_str) free(response_str);
	return nsize;

来看看数组2的生成方式:

uint16_t  protocol_Respond_Array0(uint8_t *pRcvBufferOut, uint16_t nlen)
	uint16_t ni = 0;
	uint16_t nsize			= 0;
	char *data_str			= NULL;
	char *response_str		= NULL;
	cJSON *response_root		= NULL;
	//生成Json数据格式
	response_root = cJSON_CreateObject();
	cJSON *scanPrefixArray = cJSON_CreateArray();
	cJSON_AddItemToObject(response_root, "scanPrefix", scanPrefixArray);
	for(ni = 0; ni <5 ; ni++)
        cJSON*obj=cJSON_CreateObject();
		cJSON_AddItemToArray(scanPrefixArray,obj);
		if(ni%2==0)
			cJSON_AddStringToObject(obj, "H","hello");
			cJSON_AddStringToObject(obj, "H","hi");
	response_str = cJSON_Print(response_root);
	nsize = strlen(response_str);
	if(pRcvBufferOut != NULL)
		memcpy(pRcvBufferOut, response_str, nsize);
	if(NULL !=response_root) cJSON_Delete(response_root);
	if(NULL !=response_str) free(response_str);
	return nsize;

3.解析json数组实验 

        解析无key值json数组1。

uint16_t  protocol_parse_Array0(uint8_t *pRcvBufferOut, uint16_t nlen)
	cJSON *item 		= NULL;
	cJSON *pRcvJson 	= NULL;
	cJSON *pRcvJsonSec 	= NULL;
	pRcvJson = cJSON_Parse((char *)pRcvBufferOut);
	if(pRcvJson == NULL)
		printf("cJSON_Parse failed\r\n");
		return 0;
	/*分解json类型信息*/
	pRcvJsonSec=cJSON_GetObjectItem(pRcvJson,"scanPrefix");
	if(pRcvJsonSec ==NULL)
		printf("cJSON_Parse method failed\r\n");
		return 0;
	int arraysize = cJSON_GetArraySize(pRcvJsonSec);
	for(int i=0;i<arraysize;i++)
		item=cJSON_GetArrayItem(pRcvJsonSec,i);
		if(item != NULL)
			printf("======>%s\r\n",item->valuestring);
	if(NULL !=pRcvJson) cJSON_Delete(pRcvJson);
	return 0;

     解析有key值json数组2。

uint16_t  protocol_parse_Array(uint8_t *pRcvBufferOut, uint16_t nlen)
	cJSON *item 		= NULL;
	cJSON *pRcvJson 	= NULL;
	cJSON *pRcvJsonSec 	= NULL;
	pRcvJson = cJSON_Parse((char *)pRcvBufferOut);
	if(pRcvJson == NULL)
		printf("cJSON_Parse failed\r\n");
		return 0;
	/*分解json类型信息*/
	pRcvJsonSec=cJSON_GetObjectItem(pRcvJson,"scanPrefix");
	if(pRcvJsonSec ==NULL)
		printf("cJSON_Parse method failed\r\n");
		return 0;
	int arraysize = cJSON_GetArraySize(pRcvJsonSec);
	for(int i=0;i<arraysize;i++)
		item=cJSON_GetArrayItem(pRcvJsonSec,i);
		if(item != NULL)
			cJSON *itemread=cJSON_GetObjectItem(item,"H");
			printf("H:%s\n",itemread->valuestring);
	if(NULL !=pRcvJson) cJSON_Delete(pRcvJson);
	return 0;

 今天实验到此结束!over!

1.引言 特殊的key值的json数组今天遇到了,所以研究了会才知道怎么生成和解析这种无键值的json数组。下面我们来看看今天的实验。2.json生成数组实验今天的实验就是生成这样的无key值的json数组,在这里称为数组1。{ "scanPrefix": [ "hello", "hello", "hello", "hello", "hello" ]}...
文章目录前言一、JSON是什么?二、JSON语法1.简单2.对象3.数组三、JSON和JavaScript对象相互转化1.JSON.stringify()2.JSON.parse()总结 参考红宝书JavaScript高级程序设计第三版 一、JSON是什么? JSON是JavaScript的一个严格的子集,利用了JavaScript中的一些模式来表示结构化数据。 需要注意的是JSON不是一种编程语言 二、JSON语法 JSON语法可以表示以下三种类型的 1.简单 语法与JavaScript.
奇葩的json格式,今天调试接口, 发现后台返回一段这样的json格式 看到这个图片数组,当时有点蛋疼,明明不是json格式的, 我以为json的数据类型, 全部都是键值对的, 后来上网查也没查到个所以然来,灵机一动, json,只有俩种格式, 对象和数组, 仔细观察,这个貌似也是数组,只是没有键而已,那是不是也可以当数组来处理呢。 于是乎,如下代码,果然可以解析成功。 String st
"recordId": "1ead6ee3-92c6-41dd-8a80-9447e33d6e96", "createAt": "2021-10-21 15:34:16", "status": "None", "aActivity": 0.2, "bActivity": 0.3, "gammaCpsList": [ 1.18,
转载自:http://blog.csdn.net/aa4790139/article/details/8587208 感谢原作者! JSON(JavaScript Object Notation): 是一种轻量级的数据交换格式 一、JSON建构有两种结构:对象和数组 1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构...
解析用的是:JObjectjsonF=(JObject)JsonConvert.DeserializeObject(jsonS) 这句代码,然后取value怎么取? 【如果在[前面加上{"result":,最后加上}我就会用jsonF["result"][... * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the temp 在json大行其道并作为前后端主要通讯的数据格式之一时,对json本身的使用和了解多少人都会有些概念,当然随之而来的也是对json的对象以及其字符串形式的互相转换。在历史久远的过去,前端是通过低能的eval来实现格式转换的。 那么作为常识,我们知道JSON提供了两个常用的工具方法可以实现互相转换,分别是JSON.parse(),以及JSON.stringfy();常识的另外一方面,我们也知道...
没有keyJson,例如:["http://www.cnblogs.com/Cherry-B/p/4625133.html","http://www.cnblogs.com/Cherry-B/p/4619689.html","http://www.cnblogs.com/Cherry-B/p/4613701.html"] public void alyJson(Stri...
可以使用 Go 语言内置的 json 包来解析包含不同数据类型的 json 数组。具体步骤如下: 1. 定义一个结构体,用于存储 json 数组中的数据。结构体的字段需要与 json 数组中的键名一一对应,并且需要使用 `json` 标签来指定对应的键名。 2. 使用 `json.Unmarshal()` 函数将 json 数组解析为结构体实例。该函数的第一个参数为 json 数组的字节数组,第二个参数为结构体实例的指针。 以下是一个示例代码: ```go package main import ( "encoding/json" "fmt" type Person struct { Name string `json:"name"` Age int `json:"age"` func main() { jsonStr := `[{"name":"Alice","age":20},{"name":"Bob","age":25},{"name":"Charlie","age":30,"isMarried":true}]` var people []Person err := json.Unmarshal([]byte(jsonStr), &people) if err != nil { panic(err) fmt.Println(people) 在上面的代码中,我们定义了一个 `Person` 结构体,用于存储 json 数组中的数据。然后,我们使用 `json.Unmarshal()` 函数将 json 数组解析为 `[]Person` 类型的切片。最后,我们打印出解析后的结果。 注意,上面的 json 数组中,第三个元素包含了一个额外的键值对 `{"isMarried":true}`,但是我们并没有在 `Person` 结构体中定义对应的字段。在解析时,这个键值对会被忽略。
lrx2712: QString strStartTime = QDstarttime.toString("yyyy-mm-dd hh:mm:ss"); QString strStopTime = QDstoptime.toString("yyyy-mm-dd hh:mm:ss"); 两个toString用法有问题 ,小写mm表示分钟 ,大写MM才表示月份 应该这么用:QDstoptime.toString("yyyy-MM-dd hh:mm:ss") 58 ESP32 OTA升级(双OTA分区无factory APP) 芯的一天: 感谢,我真的看官方历程一脸懵呢!接口函数干哈都不清楚 51 单片机AD采集电压值的坑 你这个明显是阻抗不匹配,ADC的输入阻抗低,接到分压电阻上时拉低了R8的电压,在ADC的前边加一个电压跟随器就可以实现阻抗变换,不影响电阻的分压值。用一个LM358就可以啊。 45 STM32 IIC主机、从机通信实例(ma51t12b触摸按键芯片) qq_41547304: 我想请问一下怎么调用这个模拟iic呢,为什么收到的一直是高电平 问题:warning: libssl.so.1.0.0, needed by …lib/libcurl.so, not found (try using -rpath or -rpath-link) 袖手,红尘: 谢谢大佬,刚做LINUX应用没多长时间,这个问题困扰了我好几天,今天终于搞定了。