我有一个字符串
str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)
如何解析字符串(str)以上的JSON?这看起来像一个简单的解析;它不能以某种方式工作。
答案 0 :(得分:52)
JSON standard需要双引号,不接受单引号,解析器也不接受。
如果你的字符串中没有转义单引号(这通常是不可能的,但这不是JSON),你可以简单str.replace(/'/g, '"')
,你应该得到有效的JSON。< / p>
答案 1 :(得分:9)
我知道这是一篇旧帖子,但您可以将JSON5用于此目的。
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
答案 2 :(得分:5)
这样的事情:
var div = document.getElementById("result");
var str = "{'a':1}";
str = str.replace(/\'/g, '"');
var parsed = JSON.parse(str);
console.log(parsed);
div.innerText = parsed.a;
&#13;
<div id="result"></div>
&#13;
答案 3 :(得分:4)
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
这为我解决了问题。
答案 4 :(得分:3)
JSON中不允许使用单引号作为键。你需要使用双引号。
对于您的用例,这可能是最简单的解决方案:
str = '{"a":1}';
如果属性需要引号,则必须使用双引号。所有 属性名称必须用双引号括起来。
答案 5 :(得分:3)
如果您确定您的JSON安全在您的控制之下(而不是用户输入),那么您可以简单地评估JSON。 Eval接受所有报价类型以及不带引号的属性名称。
var str = "{'a':1}";
var myObject = eval('(' + str + ')');
由于eval解析器的工作原理,需要额外的括号。 当Eval用于您可以控制的数据时,它并不邪恶。 有关JSON.parse和eval()之间差异的更多信息,请参阅JSON.parse vs. eval()
答案 6 :(得分:-4)
json = ( new Function("return " + jsonString) )();