关于 json 的写法问题,有一点不太理解?

2023-02-06 09:33:15 +08:00
 tool2d
JavaScript 里,可以这样写 {keyname:123}
而 json 里,就必须这样写 {"keyname":123}

多了个双引号,这不是多此一举嘛,有人能告诉我是为什么吗?
2925 次点击
所在节点    问与答
34 条回复
eaststarpen
2023-02-06 10:18:30 +08:00
我在修改机场订阅文件(yaml 格式)的时候遇到个实际的问题

格式大致如下

password: !!str 12345678901234456

其中 !!str 是一个 tag, 表示后面这串字符是一个字符串, 而不是 数字

在我的 clash 如果去除这个 tag 会将那串字符识别为 float 并报错

上面的例子相当于:
password: "12345678901234456"
icyalala
2023-02-06 10:19:35 +08:00
@icyalala SO 的相关问题,还有原作者回答的视频: https://stackoverflow.com/questions/2067974/in-json-why-is-each-name-quoted
AoEiuV020CN
2023-02-06 10:19:53 +08:00
@tool2d #18 json 又不是 javascript++,哪来什么先进,压根就不是一类东西,
javascript 是编程语言,变量名不允许特殊符号,
json 的 key 是字符串,允许各种符号,最简单通用安全稳定的表示字符串的做法就是双引号和转义,
sujin190
2023-02-06 10:22:54 +08:00
@tool2d #18 你搞错了,作为一个为传输编码设计得数据结构来说,写法方便并不重要,都是计算机编码解码的需要啥手写方便,最重要的是需要在任何语言和场景下通用简洁无歧义且尽可能高效,就楼上说的,如果可以省略引号那么处理起来就多狠很多情况需要处理,比如 key 就是引号或者其他特殊字符,作为传输编码的数据结构来说,除了增加编解码复杂度和速度外这样的价值在哪

此外每个语言都有最方便写 map 的数据结构然后转化为 json ,也就是最符合本语言规范的语法糖,JSON 不止是 JavaScript 的 JSON ,JSON 能得到如此大范围使用是因为其可以非法方便的用于不同场景不同流程不同语言间传递数据,毕竟只有 JavaScript 用着方便毛用没有,而且你确定 JavaScript 的这个语法糖不是一个坑,只是一开始没设计好然后又不好改所以也就将错就错了
luzemin
2023-02-06 10:30:24 +08:00
问就是 by design
Mexion
2023-02-06 10:33:37 +08:00
只能说就是这么设计的
tool2d
2023-02-06 10:58:20 +08:00
@icyalala 好像 JSON5 完美解决我也提到的这一些痛点。

看来还是有大佬会改革,灭掉引号的。
tairan2006
2023-02-06 11:06:38 +08:00
大哥你在说啥,这明明是 js 的设计问题啊。

谁告诉你字典的 key 只能是 string 了,我 bool ,int 没有面子的么?
ywhyme123
2023-02-06 11:42:37 +08:00
@tool2d
js 可以 1 +"1" -> '11'

别的语言就不行, 快来喷其他语言啊
wangritian
2023-02-06 12:06:32 +08:00
建议你把精力放在更开阔的地方
lizy0329
2023-02-06 12:20:33 +08:00
规定遵守便是,别问为什么
paranoia
2023-02-06 15:52:00 +08:00
去看了看 JSON5 的 github 主页

github 上的介绍:JSON5 is an extension to the popular JSON file format
重点:is an extension

github 上的介绍:Formally, the JSON5 Data Interchange Format is a superset of JSON
重点:superset

本质上还是 json ,其实这也是个语法糖
leonshaw
2023-02-06 15:58:56 +08:00
比起少写引号我更想加点注释
bojackhorseman
2023-02-07 00:50:58 +08:00
啊,我每次都是在 json 里像写 js 一样的写,不加双引号,让格式化程序帮我加🤣

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

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

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

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

© 2021 V2EX