JSON 的 Keyname 到底要不要加双引号?

2022-03-30 11:04:38 +08:00
 3dwelcome
浏览器里用 eval()解析一个 json 对象,keyname 是可以不带双引号的,比如{a:123}是合法的。

然后同样是浏览器,用 JSON.parse()去解析一个 json 对象,就必须加双引号。否则直接报错!

规范就不能统一一下嘛,一声叹息。
5942 次点击
所在节点    前端开发
49 条回复
3dwelcome
2022-03-30 16:18:24 +08:00
@shintendo "至于什么 JSX tailwind ,属于是越说槽点越多了,建议及时止损。"

我从头到尾的逻辑很清晰啊,就一条:科技以人为本,计算机能处理的双引号,就尽量避免人为去加。

计算机写个兼容函数写法不难,难的是人写的代码里,有太多是为了去兼容计算机的。

你说 tailwind 用 mx 替代 margin-left 和 margin-right 不是挺好的嘛,转译后计算机能理解 mx 含义。人写的代码越少,可维护性就越高。明明是个双赢的局面。
shintendo
2022-03-30 19:03:25 +08:00
@3dwelcome "计算机能处理的双引号,就尽量避免人为去加"
可是除了作为配置文件,我想不出需要人为加引号的场景,你不会真的像他们说的那样,后端拼接字符串吧
Trim21
2022-03-30 19:17:50 +08:00
JSON 是个数据交换格式。所以 JSON 的规范都是为了数据交换而设置设置的。你搞的太零活了才不以人为本。

你要的以人为本的那个是 JavaScript 的语法,键加不加括号都随意,甚至能像 `const obj = { user }` 一样直接把变量名和变量值作为键值对。js 对象就是你说的 “tailwind 里的 mx”,JSON 就是 css 里的“margin-left 和 margin-right ”
oneisall8955
2022-03-30 19:48:11 +08:00
@3dwelcome #17

https://imgur.com/a/mdP9q19

出现这种情况就比较懊恼
fan123199
2022-03-30 20:38:18 +08:00
我觉得 OP 对双引号有天然的反感在。其实一些规范老旧了,但他依然是规范。 你可以和自己的后端约定大家都用 json5 规范,或者 key 用数字等等,都可以,达到了美化代码的目的。但是这个就不是大家所公认的 JSON 了。 想要变规范,那就要去参与 rfc 规范修改。
agagega
2022-03-30 20:46:04 +08:00
Key 里有不合法字符怎么办?比如 - " :?那不还是得加上引号吗。那按照楼主「统一」的逻辑,不如都加上双引号?

另外有大量的语言(即使是动态语言)是会严格区分键值对 a["b"] 和对象属性 a.b 的,JSON 的 Object 在其他语言看来就是个键值对,加双引号才符合直觉
Mystery0
2022-03-31 01:30:52 +08:00
op 遇到的后端,不会也是用 js 写的吧😂
3dwelcome
2022-03-31 01:40:04 +08:00
@Mystery0 后端 API 返回的数据,是严格意义上的 JSON ,有引号,这没问题。
但是在返回结果里,某个字符串里包着的,是 js object 对象,没引号。
反正 eval 又不是不能用。
dawniii
2022-03-31 10:29:22 +08:00
楼主难道是受到 jsonp 的影响。

好多年前,好像应对跨域的情况有用 jsonp ,直接拿 js 代码执行。。。

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

https://tanronggui.xyz/t/843806

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

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

© 2021 V2EX