我有一串
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对象?
这似乎是一个简单的解析。虽然没有用。
var str = "bad example";
这不是一个好习惯,最好执行以下操作:var str = 'good example';
=>这样,您在JSON上不会有任何问题,在HTML上也不会有任何问题。:)
Answers:
该JSON标准要求双引号,并且不接受单引号,也不会对解析器。
如果您的字符串很简单,字符串中没有转义的单引号(通常是不可能的,但这不是JSON),那么可以简单一点,str.replace(/'/g, '"')
并以有效的JSON结尾。
'title': "Mama's Friend"
将变为 "title": "Mama"s Friend"
,这当然是无效的!我应该对你的答复投反对票,但我反对。此评论值得更多。
我知道这是一篇旧文章,但是您可以为此使用JSON5。
<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>
{'section': "24'"}
变为: {"section": "24""}
且不会解析。
<script>JSON.stringify(some_jsonString)</script>
如果您确定JSON受安全控制(而不是用户输入),则可以简单地评估JSON。Eval接受所有引用类型以及未引用的属性名称。
var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');
由于eval解析器的工作方式,因此需要额外的括号。当将Eval用于您控制的数据时,它并不是邪恶的。有关JSON.parse和eval()之间的区别的更多信息,请参见JSON.parse与eval()
var str = "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);
这为我解决了问题。
{'a':"A'A"}
将成为{"a":"A"A"}
json = ( new Function("return " + jsonString) )();
Function
代替eval是合理的,但是其他所有方法都是错误的。应该是var json = Function("'use strict';return " + jsonString)()