为什么JSON.Parse会显示“无效字符”?

6

我有一段在IE上运行的JS代码,其中有以下这行:

var data = JSON.parse("{ skill: 'SK_AUTO_DEV_TEST', kind: 'IS_REQUIRED' }");

有人能告诉我这个有什么问题吗?


7
请查看JSONLint,它是一个在线验证器,可以提供很好的错误信息。 - Álvaro González
2个回答

16

因为那不是有效的JSON - 你需要在属性名称周围添加引号。

JSON.parse('{ "skill": "SK_AUTO_DEV_TEST", "kind": "IS_REQUIRED" }');

1
谢谢。为什么需要在属性名称周围加引号?我看到在 JSON 解析器中并不总是这样。 - skb
3
标准要求使用双引号。JSON.parse() 遵循该规则,可能你使用的其他解析器在这个规则上更宽松。原因是为了避开保留字问题。在 JavaScript 文件中创建一个简单对象并尝试使用 { if : 0 }{ "if" : 0 }。猜猜哪一个会出错? - epascarello
你好@epascarello,你有没有想法如何处理下面的代码: var text = '{ "skill": "SK_AUTO_DEV_TEST", "kind": "IS_REQUIRED" }'; JSON.parse(text); 对我来说,它在解析行处显示无效字符。我在w3school中尝试使用单引号,那里它可以工作,但在我的javascript中,它在开头和结尾添加双引号,这使得我的解析语句像这样:JSON.parse("{ "skill": "SK_AUTO_DEV_TEST", "kind": "IS_REQUIRED" }"); - Jaikrat

3
为了详细说明epascarello的答案,请参考json.org。在第一张图中,可以看到名称/值对中的名称被定义为“字符串”。然后请注意,在定义“字符串”的图表中,它必须以双引号开头和结尾。还要注意,这适用于名称和值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接