同事为了 JSON 怎么写吵起来了!请各位断案!

2019-12-16 14:42:11 +08:00
 codeismylife

A 同事:

[
	{
		"192.168.1.2": {
			"Memory": "10%",
			"HardDisk": "25"
		},
		"192.168.1.1": {
			"Memory": "25%",
			"HardDisk": "10"
		}
	}
]

B 同事:

[
	{
		"ip": "192.168.1.1",
		"Memory": "10%",
		"HardDisk": "25"
	},
	{
		"ip": "192.168.1.2",
		"Memory": "25%",
		"HardDisk": "10"
	}
]

我认为 B 写的是对的,但是不知道怎么科学地反驳 A。A 这么写好吗?不好的话 A 的问题在哪儿呢?

32991 次点击
所在节点    程序员
342 条回复
imn1
2019-12-16 16:32:32 +08:00
B 通用,A 适合 ip 做主键的场合
sherlockwhite
2019-12-16 16:35:06 +08:00
有一说一,PHPer 不背锅。
RickyC
2019-12-16 16:36:30 +08:00
建议 B 同事的答案

比如更改操作,

B 同事只要按照 key 去替换就可以了

而 A 同事需要
step1:删除掉原来的元素
step2:添加一个新的元素
如果是有序的表,还要有一个
step1.5: 找到原来元素的位置
libook
2019-12-16 16:37:02 +08:00
没有应用场景谈对错是没有意义的。

用于字典(映射)的话选 A (其实没必要放数组里了);比如需要频繁地按照 IP 地址来取相关信息,此时用 A 方案能避免大量的循环语句。
用于呈现对象列表的话选 B ;比如返回一个服务器列表,迭代对列表里的每一台机器的信息做相应的处理。

两种我都经常用,没有啥绝对对和绝对错的,哪种合适就用哪种。
justforlook44444
2019-12-16 16:37:07 +08:00
json = javascript object notation
EurekaSeven
2019-12-16 16:37:09 +08:00
抛开应用场景谈对错都是耍流氓。
botian
2019-12-16 16:37:24 +08:00
B 的可扩展性比较好
GroupF
2019-12-16 16:37:55 +08:00
这个问题我不会,我直接给前端返回 B
sockpuppet9527
2019-12-16 16:38:26 +08:00
a 这样写不通用吧。。b 是通用的
这么说可能会挨打:比如我司写 c 要用 json 当 rpc 的 payload,a 这种解析很麻烦。。
GopherTT
2019-12-16 16:45:24 +08:00
我就想问 A 为什么多了个大括号..
linZ
2019-12-16 16:47:41 +08:00
@GopherTT 是对象,不是数组
qwerthhusn
2019-12-16 16:47:47 +08:00
A 是前端,B 是后端
前端总是想要啥处理都不用做直接用的数据
后端想从数据库返回后不做太多处理直接返回
ganbuliao
2019-12-16 16:48:16 +08:00
a 最大的问题应该就是 排序的问题吧 如果使用 jq 的 ajax 的话 json 会重新根据 key 排序
前端同学得到的数据应该是 下面这样的吧
```
[
{

"192.168.1.1": {
"Memory": "25%",
"HardDisk": "10"
},
"192.168.1.2": {
"Memory": "10%",
"HardDisk": "25"
}
}
]
```
linZ
2019-12-16 16:48:37 +08:00
自己写的项目用 a,大家一起维护用 b
svenz
2019-12-16 16:54:21 +08:00
@qwerthhusn 想吐槽你几句想想算了黑前端黑上瘾了 A 这种输出结果最大的问题就是回到项目内 大量的 hardcode 出现 跟前后端没关系 只跟水平和脑子有关系
wwcxjun
2019-12-16 16:54:34 +08:00
PHP 又背锅了... 我写 PHP 一直都是返回 B 的格式。
xuanbg
2019-12-16 16:56:51 +08:00
只用过 B 这种结构,A 这种兼职匪夷所思
weixiangzhe
2019-12-16 16:58:01 +08:00
如果是个 list 的话,a 放给前端 转成 js 的对象后,在不同的浏览器里顺序会变
xinjiang
2019-12-16 17:00:15 +08:00
场景不同组装的数据结构不同,A 为 Map 型,B 为 Array 型,不比场景讨论有意义?
xinjiang
2019-12-16 17:05:57 +08:00
很明显 A 同事的数据结构是特定场景下进行了查找优化的,B 同事的数据结构当要进行频繁的查找时不用转成 Map 结构还怎么玩?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629474

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX