同事为了 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 条回复
cluulzz
2019-12-16 16:11:01 +08:00
@sagaxu #10 A 是 List<Map<String,Message>>...
DOLLOR
2019-12-16 16:11:03 +08:00
@kedron
Object.keys({
"192.168.1.2": {
"Memory": "10%",
"HardDisk": "25"
},
"192.168.1.1": {
"Memory": "25%",
"HardDisk": "10"
}
})
>> ["192.168.1.2", "192.168.1.1"]
ypzhou
2019-12-16 16:11:11 +08:00
前端 我选 B
securityCoding
2019-12-16 16:15:06 +08:00
这 A 脑子进水了
saulshao
2019-12-16 16:16:21 +08:00
我没见过 JSON 用一个可变的值当成 Key 的,所以 A 的写法格式上不能说错,但是这种写法很难形成一个稳定的格式,因为解析这个东西的假设是第一个属性的名字(key)实际上是某个(不存在的)属性的值。一旦发生针对这个的变更,后续的所有客户端的程序可能都会受到影响。
因此,我推荐 B 的写法。
yuxuan
2019-12-16 16:17:02 +08:00
不带业务场景的讨论都是耍流氓 这玩意 还是看使用场景
leisunlove
2019-12-16 16:17:39 +08:00
前端 我会怼 A 让他改成 B
shintendo
2019-12-16 16:17:46 +08:00
A 有一个很大的问题:万一 ip 可以为空怎么办?
nianyu
2019-12-16 16:18:10 +08:00
前端 选 b
xmge
2019-12-16 16:18:24 +08:00
A 是 map 直接转 json

B 是结构体(对象)转 json

作为后端开发,我也喜欢 B。
nnqijiu
2019-12-16 16:18:45 +08:00
内容不适合作为 key 吧,A 不规范
dengshen
2019-12-16 16:20:11 +08:00
a:用数字符合做 key??? 呵呵呵, 明显是 b 方案要好!
danbai
2019-12-16 16:21:13 +08:00
ip 是个变量 应当放 V 值
DOLLOR
2019-12-16 16:23:44 +08:00
JS 的 Object.entries 和 Object.fromEntries 就是专门用来处理这种转换的。

//A->B
Object.entries({
"192.168.1.2": {
"Memory": "10%",
"HardDisk": "25"
},
"192.168.1.1": {
"Memory": "25%",
"HardDisk": "10"
}
}).map(([ip, value]) => ({
ip,
...value
}))

//B->A
Object.fromEntries([
{
"ip": "192.168.1.1",
"Memory": "10%",
"HardDisk": "25"
},
{
"ip": "192.168.1.2",
"Memory": "25%",
"HardDisk": "10"
}
].map(({ ip, ...rest }) => [ip, rest]))
WytheHuang
2019-12-16 16:24:39 +08:00
选 B
hyy1995
2019-12-16 16:26:05 +08:00
虽然都能用,但我想绝大多数人都会选 B 的
weizhen199
2019-12-16 16:26:57 +08:00
b
一般写成 A 这样,我只有重复内容才会
wangkun025
2019-12-16 16:27:56 +08:00
我选择 B
mysunshinedreams
2019-12-16 16:27:59 +08:00
我感觉需要看使用场景,A、B 都有合适的使用场景。
simenet
2019-12-16 16:28:35 +08:00
又到了炫技的时候了。。

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

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

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

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

© 2021 V2EX