javascript - 为什么 JSON 只允许字符串作为键?

标签 javascript json ecma262

为什么 JSON 只允许 string 作为键值对?为什么不是其他类型,例如 nullnumberboolobjectarray ?考虑到 JSON 与 JavaScript 紧密相关,我可以从 JavaScript 规范(ECMA-262)中得出原因吗?我完全是 JavaScript 的新手,你能帮我指出一下吗。

最佳答案

JSON 格式有意基于 JavaScript 对象字面量语法和数组字面量语法的子集,并且 JavaScript 对象只能将字符串作为键 - 因此 JSON 键也是字符串。 (好的,您可以将数字用作 JavaScript 对象键,但实际上它们会转换为字符串。)

请注意,JSON 的要点在于它是数据的字符串表示形式,允许在不同环境的不同机器上运行的以不同语言编写的程序之间轻松交换。如果您想将对象用作键,那么该对象又必须以某种方式表示为用于传输的字符串,但是接收语言需要能够将对象用作键,这意味着您需要对于那些只会一团糟的语言,JSON 的有限子集。

"Considering JSON is a part of JavaScript"

不,不是。较新的浏览器提供了创建和解析 JSON 的方法,但它们并不是语言本身的一部分,除了 JSON 是一种字符串格式,而 JavaScript 可以处理字符串。 JSON 始终 是一种字符串表示 - 它必须被解析以创建一个在 JavaScript(或其他语言)中使用的对象,一旦发生这种情况,JavaScript(或其他语言)将生成的对象视为与任何其他对象。

(另请注意,JSON 的特定位根本不一定有任何键:它可能只是一个数组,如 '["one","two","three"]'.)

关于javascript - 为什么 JSON 只允许字符串作为键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304528/

相关文章:

javascript - 防止 addRule 被剥离!重要

javascript - 带零的整数键盘

javascript - 如何获取 html 选择以使用 javascript 显示选定的值

javascript - Web 服务使用 jQuery post JSON 接收 null

javascript - 为什么美元符号不再是 "intended for use only in mechanically generated code?"

javascript - 在 JS 中,哪个更快 : Object's "in" operator or Array's indexof?

java - 如何使用属性作为键将对象列表转换为 JSON 对象?

python - 将 Pandas Dataframe 转换为特定的 json 格式

javascript - JavaScript/ECMA 的许多名称

javascript - ActionScript 就像 JavaScript?