同事为了 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 的问题在哪儿呢?

32238 次点击
所在节点    程序员
342 条回复
neverfall
2019-12-16 14:46:59 +08:00
B 的比较好,
看使用场景,A 的虽然也不算错,但是 A 的理解起来会比较费劲。
A 的场景还可以直接去重。。。
tanranran
2019-12-16 14:47:08 +08:00
要是多一个 IPV6 怎么搞
stoneabc
2019-12-16 14:48:14 +08:00
看场景,有时候不那么规范反而会更好…
多数情况还是 B。
superrichman
2019-12-16 14:48:40 +08:00
数据能正确解析的话两种都没有问题, B 的好处是传输数据少几对括号.
evilhero
2019-12-16 14:48:45 +08:00
如果用 ip 做键,意义不明,哪怕一眼就能看出是 ip

何不折中一下,看 a 的写法,应该还有别的数据,那就把 b 的 ip 信息组外面再加一层
Cbdy
2019-12-16 14:50:38 +08:00
B 好一些,数据结构越简单越好
DelayNoMore
2019-12-16 14:50:41 +08:00
A 搞了嵌套,要写多一个循环。。
lshero
2019-12-16 14:50:43 +08:00
客户端看见 A 这种肯定要妈见打的
maomaomao001
2019-12-16 14:51:24 +08:00
无论后端写成什么样,前端都是要要有个 ACL (Anti-Corruption Layer) 保证稳定性和扩展性 。

最简单的,不要为了这么个问不到结果的问题吵架

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


_.map(d[0],(v,k)=>{
return {
ip:k,
...v,
}
})

三行代码搞定的问题,自己处理一下也没什么
sagaxu
2019-12-16 14:53:34 +08:00
A 是 Map<String, Message>,message 中不带 ip 字段
B 是 List<Message>,message 带 ip 字段

我更倾向于 B,使用更方便
codeismylife
2019-12-16 14:54:10 +08:00
@Cbdy @DelayNoMore @evilhero @lshero @neverfall @stoneabc @superrichman @tanranran 再劳烦各位,A 这样写没有别的深层含义,就是简单认为这样写没问题。我与各位想法一致,认为 A 是错的,但是我想知道,是否有什么规范直接指出 A 这样写不行?这样可以快速结束争论。
optional
2019-12-16 14:54:49 +08:00
a 怎么反序列化,难道你们都是手动解析的?
learnshare
2019-12-16 14:54:58 +08:00
通常不会使用不确定的内容作为字段名
cloudyplain
2019-12-16 14:55:00 +08:00
A 在 java8 中会导致常量区快速堆满,因为一般 json 库认为 key 是有限的,设计规范也不建议 key 是一个随机值。
vakara
2019-12-16 14:55:02 +08:00
b, 看你返回的是求组,而且是有相关性的,为了后期更好扩展,比如数据大了分页,搜索的,都更有优势。
rioshikelong121
2019-12-16 14:55:23 +08:00
我个人不喜欢用内容去作为 key. 所以我选择 B.
vakara
2019-12-16 14:55:26 +08:00
@vakara s/求 /数 /g
kera0a
2019-12-16 14:55:40 +08:00
b。
a 用动态 ip 做 key,完全不适合客户端使用
qq976739120
2019-12-16 14:56:44 +08:00
一般都是 B 吧.a 可以做去重?
codeismylife
2019-12-16 14:56:46 +08:00
@maomaomao001 一看你就是个脾气好的前端,他们没吵,只是日常争论哈哈,不过呢,像 B 这样写应该更收前段欢迎吧?

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

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

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

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

© 2021 V2EX