JavaScript对象表示法是正确的JSON吗
Is JavaScript Object notation proper JSON?
如果在Chrome控制台中运行正确的JSON:
{"aaa":"bbb"}
我得到:
SyntaxError: Unexpected token :
然而,如果我运行例如:
{aaa:"bbb"}
它没有抱怨。同样在下面运行也很好:
aaa={"aaa":"bbb"}
我认为正确的JSON必须将属性名称用引号括起来,那么为什么会发生这种情况呢?JS对象表示法不是正确的JSON吗?
问题是由语法/解析上下文引起的。
给定{"aaa":"bbb"}
作为一个程序,这是一个块[语句],其中"aaa"是一个后跟冒号的字符串,因此是无效语法。它可以最低限度地复制为:"aaa":"bbb"
,因为大括号只会增加混乱。
给定{aaa:"bbb"}
作为一个程序,这是一个语句,其中aaa
(标识符)是一个标签,后跟字符串"bbb"
(也在语句上下文中)。这很好,但它确实而不是返回一个对象。同样,它在语句上下文中等价于aaa:"bbb"
。
给定aaa={"aaa":"bbb"}
作为一个程序,现在{..}
在表达式上下文中被解析,并被视为Object Literal;生成的对象被指定给变量。表达式上下文可以使用其他语法结构强制使用,例如+{"aaa":"bbb"}
、({"aaa":"bbb"})
或更有用的console.log({"aaa":"bbb"})
。
所有这些都解决了,因为JavaScript Object Literal语法在三种情况中有两种根本不适用:
JSON几乎是,但不是JavaScript Object Literals的适当子集;使用适当的JSON工具和验证。
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象