javascript - JavaScript 对象表示法是正确的 JSON 吗?

标签 javascript json

<分区>

如果在 Chrome 控制台中我运行正确的 JSON:

{"aaa":"bbb"}

我得到:

SyntaxError: Unexpected token :

如果我运行例如:

{aaa:"bbb"}

它不会提示。也可以在下面运行:

aaa={"aaa":"bbb"}

我认为正确的 JSON 必须将属性名称用引号括起来,那为什么会这样呢? JS 对象符号不是正确的 JSON 吗?

最佳答案

问题是由语法/解析上下文引起的。

给定 {"aaa":"bbb"} 作为一个程序,这是一个 Block [statement]其中“aaa”是一个 String 后跟一个冒号,因此是无效语法。它可以最低限度地重现为:"aaa":"bbb",因为大括号只会增加困惑。

给定 {aaa:"bbb"} 作为一个程序,这是一个语句,其中aaa(一个标识符) 是一个 Label后跟字符串 "bbb"(也在语句上下文中)。没问题,但它 返回一个对象。同样,它等同于语句上下文中的 aaa:"bbb"

给定 aaa={"aaa":"bbb"} 作为一个程序,现在 {..}表达式上下文中被解析 并被视为 Object Literal ;结果对象被分配给变量。表达式上下文可以强制使用其他语法结构,例如 +{"aaa":"bbb"}({"aaa":"bbb"}) 或,更有用的是 console.log({"aaa":"bbb"})

抛开所有这些,因为 JavaScript 对象字面量语法根本不适用于三种情况中的两种:

JSON 是 almost-but-not-quite JavaScript 对象字面量的真子集;使用适当的 JSON 工具和验证。

关于javascript - JavaScript 对象表示法是正确的 JSON 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26029558/

相关文章:

javascript - Google Charts,同时使用多个条形图和相关控件

javascript - Node.js 和 ES6 类错误

javascript - 通过window.showModalDialog打开页面有什么不同?

javascript - Jquery getJSON 未捕获语法错误 : Unexpected token : error

java - Jackson 无法识别的字段 "media:recent"

javascript - 使用 Chrome 控制台 JS 和 CSS 改变 Youtube 视频页面

javascript - 无法使用 jQuery 选择器访问单击事件

javascript - 向 Javascript 列表中的每个对象添加/删除属性的最简单方法?

java - (Gson) JSON 到包含 ArrayList<Class> 的 Java 对象

javascript - 如何使用 java 脚本发布 json 请求并接收对 "go server"(go 语言)的 json 响应