接口返回数据问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sandman511
V2EX    程序员

接口返回数据问题

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

    [ { "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
    < href="/member/qiayue" class="dark">qiayue  
    PRO
       2020-11-30 15:50:43 +08:00
    简单点说,就是方式 2 前端 foreach 不方便
    rodrick
        5
    rodrick  
       2020-11-30 16:01:14 +08:00
    之前就有个帖子专门骂这种返回格式的,数据量不大沟通好了 2 也不是不行,但是 key 最好就是字段名,value 就是值,维护方便看的也舒服
    itechify
        6
    itechify  
    PRO
       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 就是这种格式,后端也方便。
    第二种可以在特殊情况下使用,譬如一次性数据量非常大,节约的字节数还是很可观的。
    AV1
        10
    AV1  
       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     Solana     5347 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:54 PVG 15:54 LAX 00:54 JFK 03:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86