我有一个字符串
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
如何将上述字符串 (str) 解析为 JSON 对象?
这似乎是一个简单的解析。虽然它不起作用。
我有一个字符串
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
如何将上述字符串 (str) 解析为 JSON 对象?
这似乎是一个简单的解析。虽然它不起作用。
该JSON标准要求双引号,并且不接受单引号,也不会对解析器。
如果您的字符串中有一个没有转义单引号的简单案例(这通常是不可能的,但这不是 JSON),您可以很简单str.replace(/'/g, '"')
,最终应该得到有效的 JSON。
我知道这是一篇旧帖子,但您可以为此目的使用JSON5。
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
如果您确定您的 JSON 安全地在您的控制之下(而不是用户输入),那么您可以简单地评估 JSON。Eval 接受所有引用类型以及不带引号的属性名称。
var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');
由于 eval 解析器的工作方式,需要额外的括号。当 Eval 用于您可以控制的数据时,它并不是邪恶的。有关 JSON.parse 和 eval() 之间差异的更多信息,请参阅JSON.parse vs. eval()
JSON 中不允许对键使用单引号。您需要使用双引号。
对于您的用例,这可能是最简单的解决方案:
str = '{"a":1}';
来源:
如果属性需要引号,则必须使用双引号。所有属性名称都必须用双引号括起来。
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
这为我解决了这个问题。