JavaScript Object表示法是否适合JSON?

时间:2014-09-25 02:30:30

标签: javascript json

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

{"aaa":"bbb"}

我明白了:

SyntaxError: Unexpected token :

但是,如果我运行例如:

{aaa:"bbb"}

它没有抱怨。在下面运行也很好:

aaa={"aaa":"bbb"}

我认为正确的JSON必须包含用引号括起来的属性名称,为什么会发生这种情况呢? JS对象表示法不是正确的JSON吗?

1 个答案:

答案 0 :(得分:13)

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

{"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 Object Literal语法在三种情况中只有两种不适用:

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