请问这个json怎么转换为serde的struct
{
"code": 200,
"msg": "success",
"data": {
"1": {
"aaa": {
"num": 0,
"weight": 0,
"sku_name": ""
},
"bbb": {
"num": 0,
"weight": 0,
"sku_name": ""
}
},
"2": {
"aaa": {
"num": 0,
"weight": 0,
"sku_name": ""
},
"bbb": {
"num": 0,
"weight": 0,
"sku_name": ""
}
},
"3": {
"aaa": {
"num": 0,
"weight": 0,
"sku_name": ""
},
"bbb": {
"num": 0,
"weight": 0,
"sku_name": ""
},
"ccc": {
"num": 0,
"weight": 0,
"sku_name": ""
}
},
"4": {
"aaa": {
"num": 0,
"weight": 0,
"sku_name": ""
},
"bbb": {
"num": 0,
"weight": 0,
"sku_name": ""
}
}
}
}
1
共 12 条评论, 1 页
评论区
写评论如果是直接实现倒是挺简单的:
如果这个 json 中的数字顺序无关紧要,或者你能保证顺序正确的话可以像这样反序列化成列表:
当然,如果顺序不能保证也能反序列化成列表。实现方式是类似的。可以参照学习 serde 官方文档。
确实是这个方法。我的问题是我建立了中间的struct,而且随便给了一个名字,这个名字找不到。
谢谢
--
👇
Mike Tang: 那其实就是 HashMap<String, HashMap<String, Item>>
不过这种效率极低,不信可以写个评测代码试试。
那其实就是 HashMap<String, HashMap<String, Item>>
不过这种效率极低,不信可以写个评测代码试试。
除非你的键不全是字符串形式的数字,包含字母等其他字符,那就只能用map了
--
👇
sunnyregion: 使用map效率要比数组高,因为直接定位到,而不是做循环
--
👇
sunnyregion: 这个是go生成的[]map(string,[]map(string,string))
--
👇
Mike Tang: 这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
?为什么数组要循环?根据你的例子,应该是按照下标来找元素,那么数组直接索引就可以找到了,又不是查找元素在数组中的位置,那才要循环遍历数组。用map可以用字符串等数据结构作为键,然后根据键来直接定位值,如果用数组来存储,那么需要遍历数组,比较键是否相等。可是你这里的键是字符串形式的数字啊,完全可以转换成数字然后用来作为数组的下标。
--
👇
sunnyregion: 使用map效率要比数组高,因为直接定位到,而不是做循环
--
👇
sunnyregion: 这个是go生成的[]map(string,[]map(string,string))
--
👇
Mike Tang: 这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
数组直接寻址,不需要像map一样处理哈希和解决冲突,肯定是数组性能更好
--
👇
sunnyregion: 使用map效率要比数组高,因为直接定位到,而不是做循环
--
👇
sunnyregion: 这个是go生成的[]map(string,[]map(string,string))
--
👇
Mike Tang: 这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
使用map效率要比数组高,因为直接定位到,而不是做循环
--
👇
sunnyregion: 这个是go生成的[]map(string,[]map(string,string))
--
👇
Mike Tang: 这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
这个是go生成的[]map(string,[]map(string,string))
--
👇
Mike Tang: 这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
每个叶子元素都是相同的,在结构组织上就是一个二维数组。
这种json就是不规范的json,数组就应该用数组。弄成这种1,2,3,4 key没办法优化。性能很低。
不是aaa,改了
--
👇
Mike Tang: 你确定同名aaa是正确的?
你确定同名aaa是正确的?