henryhu
V2EX  ›  问与答

用汉字做 json 的 key,是不是因为中文编程的影响?

  •  
  •   henryhu · Mar 4, 2019 · 9137 views
    This topic created in 2807 days ago, the information mentioned may be changed or developed.
    使用某云的 api,看到返回的 json 结构中,key 是汉语,难道开发者学过易语音之类的中文编程?
    Supplement 1  ·  Mar 4, 2019
    看了评论,发觉这个场景使用中文 key 是对的,谢谢诸位大拿的解释。
    Supplement 2  ·  Mar 4, 2019
    再次反转,现在我认为用中文做 key 不好,具体到这个营业执照识别,把外部识别来的文本作为 key,那这个接口是不稳定的。随着识别图片的不同,key 会变动,用户需要自己去处理这个变化。
    50 replies  •  2019-07-06 04:06:57 +08:00
    boris1993
    boris1993
    Mar 4, 2019 via Android
    1
    或者 ta 觉得切输入法很爽
    tabris17
    tabris17
    Mar 4, 2019
    2
    人家是考虑到 api 使用者的能力水平,另一方面可以省去写文档了
    kernel
    kernel
    Mar 4, 2019 via Android
    3
    不发个 api 文档地址吗
    si
    si
    Mar 4, 2019
    4
    json 用中文做 key 有什么,json 的 key 本来就是字符串。还有人用数字和符号做 key。
    Hyponet
    Hyponet
    Mar 4, 2019❤️6
    5
    这种呢?

    ```
    {
    "is_succeed":"✅"
    }
    ```
    henryhu
    henryhu
    OP
    Mar 4, 2019
    6
    api 截图在这里
    0x11901
    0x11901
    Mar 4, 2019
    7
    为什么不能用中文当 key ?我还用 emoji 做变量名称呢?思维逐渐江化。
    Flasky
    Flasky
    Mar 4, 2019 via Android
    8
    中文英文在代码里都是字符串,编程难道就只能用英文吗?会不会有点装逼的感觉?
    aver4vex
    aver4vex
    Mar 4, 2019
    9
    起变量名真特么头大。
    bestie
    bestie
    Mar 4, 2019
    10
    这个变量名确实不太好起,可能在特定的场景使用中文 key 更加合适
    coderluan
    coderluan
    Mar 4, 2019❤️1
    11
    明知同事英语水平不好,还拒绝使用中文注释,这种不叫专业,叫装逼。此事同理。
    Sapp
    Sapp
    Mar 4, 2019❤️3
    12
    @coderluan 这种情况是管理人员和架构的锅,一开始没带好节奏,我这里所有 api 接口都要求注释,注释必须中文,精确到每个 key 的详细解释以及 value 的类型和值的范围,之后直接自动读注释生成文档,每个根目录下都有对应的开发流程图和详细项目文档,包括涉及到的技术和原型,虽然初期花点时间,但是后期除非有 bug 否则根本不需要对接,是个人就看明白了,没按要求的代码都提不上去。
    henryhu
    henryhu
    OP
    Mar 4, 2019
    13
    有同学认为使用中文作为 key 没什么问题,这个问题可以讨论哈。具体到这个 api,有点怪异啊,code, msg, result 这些不使用中文也罢,问题是“法定代表人”下面又来一个 words 是啥意思?难道不应该是"法定代表人.文字"。words 其实是完全多余的。哪个同学设计的这个 api,请出来走两步,我保证......
    reus
    reus
    Mar 4, 2019❤️1
    14
    这个场景,中文 key 没问题

    words 也没问题,给以后加字段留下空间。你还是太嫩。

    总之没有问题。
    LukeChien
    LukeChien
    Mar 4, 2019 via Android
    15
    可能因为 json 不支持注释,为了提高可读性
    coderluan
    coderluan
    Mar 4, 2019
    16
    @Sapp 你说的对,但是跑题了吧,这个贴只是说中文和英文应该看实际需求,你这个扯太远了。
    SuperMild
    SuperMild
    Mar 4, 2019❤️1
    17
    某些情况下用中文其实很好, 特别清晰.

    上面有人说换输入法麻烦, 但是像这个例子的具体情况, 你用了英文做 key, 搞不好还要想办法通过注释或者文档用中文来说明, 到时还是要用中文, 岂不是更麻烦.
    icanfork
    icanfork
    Mar 4, 2019
    18
    场景:"识别成功"

    key 是识别的 key (法定代表人:xxx )
    这个场景我觉得对呀,不然还得 OCR 之后翻译成英文吗?
    lynskylate
    lynskylate
    Mar 4, 2019 via Android
    19
    看场景。中文可以省去注释和想变量名,尤其在同事水平不高的情况下(▰˘◡˘▰)。但是大多情况下,message,status 这种大家都能理解,你用中文不是自找不痛快?我不用中文的原因最主要是不喜欢切输入法
    gps949
    gps949
    Mar 4, 2019
    20
    首先,我认同为了同事、合作者等方便,可以用中文,或者应当注释用中文写。

    但另一方面,我想说,已经 9102 年了,编程语言千万条,你学了 c 学了 c#学了 java 学了 js 学了 php 学了 python 学了 golang 学了……不考虑简单学一下英语吗?毕竟在输入法切换、国际通用化、字符集环境等问题上省心很多啊
    irobbin
    irobbin
    Mar 4, 2019
    21
    竟然有人说没问题。。万一有人不认识中文咋搞?
    henryhu
    henryhu
    OP
    Mar 4, 2019
    22
    是的,目前是中国人做开发,ok,以后要是让一个不懂中文的老外接手代码,估计要懵逼。
    exceloo
    exceloo
    Mar 4, 2019
    23
    @henryhu 你说多个 word 没意思,其实对方应该是想到了以后的扩展。以后想要多加个字段也很容易,而且也可以兼容老页面。
    wengjin456123
    wengjin456123
    Mar 4, 2019 via Android
    24
    这有啥的,key 用中文我觉得没问题,看场景
    qq292382270
    qq292382270
    Mar 4, 2019
    25
    跟我对接的一个后端,返回的数据喜欢用英文单词来定义 key 或者变量名之类,但是又很不标准..
    reus
    reus
    Mar 4, 2019❤️1
    26
    明显是营业执照的文字识别接口,如果一个外国人连汉字都不懂,他做啥文字识别?这里用中文是正确的。这些汉字本来就是营业执照上面的文字,识别出来的也是中文字,你非要用英文是什么意思?
    henryhu
    henryhu
    OP
    Mar 4, 2019
    27
    就这个场景来说,仍然有商榷的地方。key 直接使用识别出来的文本,其实没有考虑到文本变动的情况。

    比如,以后如果新的证件修改了,把“住所”改成“营业地址”,那就得新加一个“营业地址”字段,并且,api 用户要自己判断,“住所”和“营业地址”是同一个信息。api 如果有预见,无论新旧证件,都用 address 表示营业地址,无需修改 api,方便用户使用。

    当然,也可以不修改 api,仍然使用中文 key,新的“营业地址”信息放到“住所”里,这个变化对于新用户来说有点蒙圈。
    MineDog
    MineDog
    Mar 4, 2019 via Android
    28
    会有编码方式不一致导致的乱码的风险
    maichael
    maichael
    Mar 4, 2019
    29
    因为这里的 key 本来就是中文的,这个“中文”也是识别出来的呀。
    henryhu
    henryhu
    OP
    Mar 4, 2019
    30
    如何写成这样,是不是感觉自然一点,也不需要冗余的 words:

    ```
    result: {
    address: {
    label: '住所',
    content: '***********'
    },
    ...
    ```
    0987363
    0987363
    Mar 4, 2019 via Android
    31
    扯淡吧,服务器返回的 gbk 编码,你客户端是 utf8,怎么破,还有繁体的
    reus
    reus
    Mar 4, 2019
    32
    @henryhu 营业执照登记的事项是《公司法》规定的,不是随便改的,想改是要修法的,不会有谁无聊到改一个同义词。
    Tokin
    Tokin
    Mar 4, 2019
    33
    Tokin
    Tokin
    Mar 4, 2019
    34
    henryhu
    henryhu
    OP
    Mar 4, 2019
    35
    @Tokin 被墙了。如果这样写,用户使用一个值,不得不去遍历 result,不太好吧
    icylogic
    icylogic
    Mar 4, 2019 via iPhone
    36
    @0987363 为什么要去考虑写服务器会返回 gbk 编码的人……
    reus
    reus
    Mar 4, 2019
    37
    @Tokin 因为 label 是唯一的,所以把 label 作为键,就变成了最开始的样子。
    johnnyNg
    johnnyNg
    Mar 4, 2019
    38
    写成这样比较好吧,
    [
    {
    "label": "法定代表人",

    "value": "王某"
    },

    {
    "label": "成立日期",

    "value": "2019-02-11"
    }
    ]
    AlphaTr
    AlphaTr
    Mar 4, 2019
    39
    说 JSON 用 GBK 的。。。你们用的真是 JSON 么
    ffeii
    ffeii
    Mar 4, 2019
    40
    反正都要遍历的,jsonArray 和 jsonObject 不都一样吗,用 jsonObject 还能省字节
    Tokin
    Tokin
    Mar 4, 2019
    41
    @henryhu 的确,如果只是单纯的全部显示还好,如果只用某一个值的话,好像用中文做 key 我也能接受,但是感觉“不规范”甚至感觉很奇怪。
    @reus emmm,你的账号好像出了点问题,你的回复我收不到提醒。
    henryhu
    henryhu
    OP
    Mar 5, 2019
    42
    @reus 我还真去查了一下公司法,它的规定如下:

    "公司营业执照应当载明公司的名称、住所、注册资本、经营范围、法定代表人姓名等事项。"

    这里没有规定营业执照上只能是这几个事项,比如还有一个重要的“统一社会信用代码“没在公司法上规定,而且,三证合一也改过营业执照上的登记事项。
    reus
    reus
    Mar 5, 2019
    43
    @henryhu 那就更应该保持原样,不要自作聪明。不要假定 "address" 就一定对应 "住所"。现在有种虚拟注册地址,用来注册的,实际经营地址又是另一个。如果以后法定需要将实际经营地址也写上去,那 "address" 就有两个了,你又要如何表示?数据原本是怎样就怎样,你是处理不了的,不要帮用户做多余的事情。营业执照本身就是一系列键值对,键是怎样就怎样,你只是一个识别接口,你不要假定调用接口的人要怎样使用这些数据,这不是一个文字识别接口应该做的事情。
    jokerlee
    jokerlee
    Mar 5, 2019 via Android
    44
    这个 api 设计不太好,还是用 array 好一些,每个字段之少有一个 key 描述,而且没法在兼容现有格式的前提下加新的顶级字段
    henryhu
    henryhu
    OP
    Mar 5, 2019
    45
    意见仍然分歧,我还是认为接口是服务。营业执照写的是一些企业信息,在计算机中表示为键值对,并不能就认定营业执照本身是按键值对的规则来设计的。如果用户只需要识别图片中的键值对,不要做其他动作,那 words 的预留就没有必要了。意见保留哈。
    swulling
    swulling
    Mar 5, 2019 via iPhone
    46
    38 正解
    gzf6
    gzf6
    Mar 5, 2019 via iPhone
    47
    淘宝的某些数据也是如此
    leefly
    leefly
    Mar 5, 2019
    48
    @HypoChen (这种的拖出去打三十分钟 🤣
    hoyixi
    hoyixi
    Mar 5, 2019
    49
    别忘了,API 是给你用的,到时候真有问题,他们改 API 分分钟,麻烦的又不是他们自己。

    很多平台的意识里,开发者就不算客户吗?不思量下客户体验吗?
    s1E4GnZ4A2qGRyva
    s1E4GnZ4A2qGRyva
    Jul 6, 2019
    50
    请问是哪个 API ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2233 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 98ms · UTC 05:10 · PVG 13:10 · LAX 21:10 · JFK 00:10
    ♥ Do have faith in what you're doing.