V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sandman511
V2EX  ›  程序员

接口返回数据问题

  •  1
     
  •   sandman511 · 2020-11-30 15:37:59 +08:00 · 2317 次点击
    这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    21 条回复    2020-11-30 19:01:41 +08:00
    securityCoding
        1
    securityCoding  
       2020-11-30 15:38:39 +08:00
    不行,用 1
    KIMMG
        2
    KIMMG  
       2020-11-30 15:39:47 +08:00
    这个不是可不可以的问题,而是要不要的问题。

    当然可以。但是对于消费者来说,他不明白你的 key 和 value 的意义。除非你的接口 uri 很明显
    liyang5945
        3
    liyang5945  
       2020-11-30 15:50:23 +08:00   ❤️ 1
    这种帖每隔一段时间就会冒出来,参考 /t/661896
    qiayue
        4
    qiayue  
       2020-11-30 15:50:43 +08:00
    简单点说,就是方式 2 前端 foreach 不方便
    rodrick
        5
    rodrick  
       2020-11-30 16:01:14 +08:00
    之前就有个帖子专门骂这种返回格式的,数据量不大沟通好了 2 也不是不行,但是 key 最好就是字段名,value 就是值,维护方便看的也舒服
    oneisall8955
        6
    oneisall8955  
       2020-11-30 16:08:04 +08:00 via Android
    月经贴
    mirrorpen
        7
    mirrorpen  
       2020-11-30 16:09:38 +08:00
    自己写给自己用开心就好,给别人用会被砍
    tabris17
        8
    tabris17  
       2020-11-30 16:09:55 +08:00   ❤️ 1
    {
    "apple": {"name": "apple", "price" : 10},
    "peach": {"name": "peach", "price" : 10},
    "beach": {"name": "beach", "price" : 10}
    }
    xuanbg
        9
    xuanbg  
       2020-11-30 16:10:26 +08:00
    第一种前端好处理,也是通常大家使用的方式。一个集合序列化成 JSON 就是这种格式,后端也方便。
    第二种可以在特殊情况下使用,譬如一次性数据量非常大,节约的字节数还是很可观的。
    DOLLOR
        10
    DOLLOR  
       2020-11-30 16:13:22 +08:00 via Android
    任何时候都应该选择第一种写法,除非用第二种写法能加工资。
    zeropercenthappy
        11
    zeropercenthappy  
       2020-11-30 16:13:25 +08:00
    @tabris17 我刀收不住了,你别跑
    tabris17
        12
    tabris17  
       2020-11-30 16:15:54 +08:00
    @zeropercenthappy 身怀利器 杀心自起 阿弥陀佛
    newbieRenew
        13
    newbieRenew  
       2020-11-30 16:28:27 +08:00 via iPhone
    你用 2 的话,下次增加 1 个“数量”你咋整?增加 100 个呢
    liyer
        14
    liyer  
       2020-11-30 16:35:38 +08:00   ❤️ 1
    {
    "10" : ["apple", "peach","pear"]
    }
    FakNoCNName
        15
    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
        16
    lisianthus  
       2020-11-30 17:27:18 +08:00
    2 给前端也好处理,多写一条 Object.entries 就是了,不过确实语义不好理解
    dxkkb24
        17
    dxkkb24  
       2020-11-30 18:27:02 +08:00
    我还见过调用的接口返回的 json 的 key 是中文的
    gwybiaim
        18
    gwybiaim  
       2020-11-30 18:41:49 +08:00
    @dxkkb24 #17 key 是中文也不一定是问题,关键看是不是方便处理和扩展。
    显然方式 2 不好扩展
    raaaaaar
        19
    raaaaaar  
       2020-11-30 18:50:33 +08:00 via Android
    可读性,鬼知道 2 里那个数字是什么意思。
    dxkkb24
        20
    dxkkb24  
       2020-11-30 18:53:04 +08:00
    @cshijiel 如果编码不一样的话是转不成功对象的
    gwybiaim
        21
    gwybiaim  
       2020-11-30 19:01:41 +08:00
    @dxkkb24 #20 编码如果有问题,value 部分也可能乱码,也有可能导致转不成功对象。跟 key 是不是中文没有关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.