接口返回数据问题

2020-11-30 15:37:59 +08:00
 sandman511

[ { "name":"apple", "price":"10" }, { "name":"peach", "price":"10" }, { "name":"beach", "price":"10" } ]

{"apple":"10","peach":"10","beach":"10"}

可以用下面的方式返回数据吗,这样的话查 apple 的价格会很方便

2219 次点击
所在节点    程序员
21 条回复
securityCoding
2020-11-30 15:38:39 +08:00
不行,用 1
KIMMG
2020-11-30 15:39:47 +08:00
这个不是可不可以的问题,而是要不要的问题。

当然可以。但是对于消费者来说,他不明白你的 key 和 value 的意义。除非你的接口 uri 很明显
liyang5945
2020-11-30 15:50:23 +08:00
这种帖每隔一段时间就会冒出来,参考 /t/661896
qiayue
2020-11-30 15:50:43 +08:00
简单点说,就是方式 2 前端 foreach 不方便
rodrick
2020-11-30 16:01:14 +08:00
之前就有个帖子专门骂这种返回格式的,数据量不大沟通好了 2 也不是不行,但是 key 最好就是字段名,value 就是值,维护方便看的也舒服
oneisall8955
2020-11-30 16:08:04 +08:00
月经贴
mirrorpen
2020-11-30 16:09:38 +08:00
自己写给自己用开心就好,给别人用会被砍
tabris17
2020-11-30 16:09:55 +08:00
{
"apple": {"name": "apple", "price" : 10},
"peach": {"name": "peach", "price" : 10},
"beach": {"name": "beach", "price" : 10}
}
xuanbg
2020-11-30 16:10:26 +08:00
第一种前端好处理,也是通常大家使用的方式。一个集合序列化成 JSON 就是这种格式,后端也方便。
第二种可以在特殊情况下使用,譬如一次性数据量非常大,节约的字节数还是很可观的。
DOLLOR
2020-11-30 16:13:22 +08:00
任何时候都应该选择第一种写法,除非用第二种写法能加工资。
zeropercenthappy
2020-11-30 16:13:25 +08:00
@tabris17 我刀收不住了,你别跑
tabris17
2020-11-30 16:15:54 +08:00
@zeropercenthappy 身怀利器 杀心自起 阿弥陀佛
newbieRenew
2020-11-30 16:28:27 +08:00
你用 2 的话,下次增加 1 个“数量”你咋整?增加 100 个呢
liyer
2020-11-30 16:35:38 +08:00
{
"10" : ["apple", "peach","pear"]
}
FakNoCNName
2020-11-30 16:43:27 +08:00
不好,用第一种虽然看着冗余,但是写代码操作的时候友好(不单单是写起来简单,扩展也容易),所有的读写都可以抽象到一个或者一类方法。
并且
1. key 是固定的,逻辑判断容易
2. 读取 obj.key 就能得到值 ${value}

如果使用第二种,增删改查,每个 Key:Value 的 Key 都是不确定的,做任何操作基本要靠遍历,代码写起来复杂不说,通用性也差。

如果还是觉得不太理解,可以自己动手写一段简单的代码,动手实践下就懂了。

Talk is cheap, show me the code !
lisianthus
2020-11-30 17:27:18 +08:00
2 给前端也好处理,多写一条 Object.entries 就是了,不过确实语义不好理解
dxkkb24
2020-11-30 18:27:02 +08:00
我还见过调用的接口返回的 json 的 key 是中文的
gwybiaim
2020-11-30 18:41:49 +08:00
@dxkkb24 #17 key 是中文也不一定是问题,关键看是不是方便处理和扩展。
显然方式 2 不好扩展
raaaaaar
2020-11-30 18:50:33 +08:00
可读性,鬼知道 2 里那个数字是什么意思。
dxkkb24
2020-11-30 18:53:04 +08:00
@cshijiel 如果编码不一样的话是转不成功对象的

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

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

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

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

© 2021 V2EX