<分区>
如果在 Chrome 控制台中我运行正确的 JSON:
{"aaa":"bbb"}
我得到:
SyntaxError: Unexpected token :
如果我运行例如:
{aaa:"bbb"}
它不会提示。也可以在下面运行:
aaa={"aaa":"bbb"}
我认为正确的 JSON 必须将属性名称用引号括起来,那为什么会这样呢? JS 对象符号不是正确的 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 响应