V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
monster1priest
V2EX  ›  问与答

为什么公司 json 的 value 都是 str?

  •  1
     
  •   monster1priest · 2021-09-29 11:34:26 +08:00 via iPhone · 2981 次点击
    这是一个创建于 1184 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么好多公司的项目用 json 传数据,bool 和 int 都用 str ?
    为什么不用 bool 和 number,看起来不是会更清晰吗?
    是为了考虑兼容性吗?

    14 条回复    2021-09-29 17:07:18 +08:00
    vvhhaaattt
        1
    vvhhaaattt  
       2021-09-29 12:07:29 +08:00 via Android
    bool 不清楚,数字可能是
    1 json 数字不区分浮点数与整数
    2 前端如果对数字不做计算的话,显示更方便,不需要前端处理
    3 需要精度控制的接口,前端收到 float 会很烦
    4 有可能超精度范围的话就只能用字符串了,剩下的前端处理
    Mithril
        2
    Mithril  
       2021-09-29 12:19:49 +08:00
    JSON 直接传数字的话各种精度坑,还不如用字符串,精度自己控制。反正绝大部分语言都带字符串和数字的转换。
    既然字符串和数字都是字符串,为啥还留个 bool 。。。全用字符串直接统一了。
    masterclock
        3
    masterclock  
       2021-09-29 12:41:09 +08:00
    曾经见过,收到的全 String JSON 反序列化成 Map,取出来的就是 String,
    数字要计算的解析一下
    Boolean 直接比较字符串
    内嵌的对象 TMD 也是 String,用的时候再解析一下

    又不是不能用
    tinkerer
        4
    tinkerer  
       2021-09-29 12:46:44 +08:00
    如一楼所言, 数字用 string 是为了控制精度, 别的我就觉得是领导的个人决定了
    Justin13
        5
    Justin13  
       2021-09-29 12:56:17 +08:00 via Android
    数值有精度和溢出的问题
    sadfQED2
        6
    sadfQED2  
       2021-09-29 12:56:30 +08:00 via Android
    因为后端是 php 吧,如果后端不全部转 str 你又会吐槽垃圾后端,返回值一会 int 一会 bool 一会 str
    30DReBYaadTBs4Gk
        7
    30DReBYaadTBs4Gk  
       2021-09-29 12:57:13 +08:00 via Android
    不同语言处理的时候,很多库不支持 int64
    IvanLi127
        8
    IvanLi127  
       2021-09-29 13:03:10 +08:00 via Android
    因为懒呗,数字除了精度和长度限制外,一般整数和允许丢失精度的浮点数还是应该用 number 。没啥兼容性问题。
    cpstar
        9
    cpstar  
       2021-09-29 13:25:56 +08:00
    全都 str 化,根据实际情况再做强类型,不好么? javascript 本身就是弱类型,为啥要纠结这个呢?

    何况还有前边说的数字精度问题、序列化 /反序列化问题
    ShuoHui
        10
    ShuoHui  
       2021-09-29 13:29:03 +08:00 via iPhone
    number 除非只有 0 、1,其他时候反正我都用 str,少点坑。
    Leonard
        11
    Leonard  
       2021-09-29 13:36:23 +08:00
    str 坑少,前几天还碰到一个 double 的精度问题
    CodeCodeStudy
        12
    CodeCodeStudy  
       2021-09-29 14:55:37 +08:00
    json 就是拿来传输的啊,传输的都是字符串
    EscYezi
        13
    EscYezi  
       2021-09-29 16:51:00 +08:00 via iPhone
    我参与的项目都是用 bool 和 number 的,除非要传 long 这种超精度只能用 string 了
    BeautifulSoap
        14
    BeautifulSoap  
       2021-09-29 17:07:18 +08:00
    因 为 json 里 数 字 是 不 区 分 int 和 浮 点 的,没有做好约定,你根本不知道对方给你传的 5 到底是 int 还是浮点。而且有经验的人跟你说,你用 json 的数字来传送 `5.0` 这样的浮点值的时候极坑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.