我想通过eval将json字符串转换为object,但它失败并出现如下错误:
未捕获的SyntaxError:意外的标识符VM250:1
下面是我的字符串: “[{ “quiz_id”: “3”, “_ ID”: “1”,的 “option_in_json”: “[{\” 选项\ “:\” 1 \” \ “is_answer \”:假}, {\ “选项\”:\ “2 \” \ “is_answer \”:真}] “下,” 问题 “:” 1 + 1" }]';
似乎粗体部分有问题,但我不知道如何修复它 以下代码无效
var limit = 10,
i = 0;
function step() {
setTimeout(function() {
if (i < 10) console.log(++i);
step();
}, 1000);
}
step();
下面的代码正在运行,所以我认为这个json字符串的数据结构是好的
var m='[{"quiz_id":"3","_id":"1","option_in_json":"[{\"option\":\"1\",\"is_answer\":false},{\"option\":\"2\",\"is_answer\":true}]","question":"1+1"}]';
eval(m);
还尝试使用$ .parseJSON但没有运气
答案 0 :(得分:4)
它不起作用,因为您没有正确转义字符串文字中的数据。在第一种情况下查看m
的值,尤其是引号:
[{"option_in_json":"[{"option":"1","is_answer":false}]","question":"1+1"}]
// ^ ^
我删除了一些不相关的数据。您应该能够看到这不是有效的JavaScript(或JSON),因为option
之前的引号会终止字符串。
为了将数据放入字符串文字中,您应该修复数据,使其不包含嵌套的JSON,或者转义\
:
'[{"option_in_json":"[{\\"option\\": ... }]"}]'
当然,如果你不把它放在一个字符串文字中,那就更好了。
var m='[{"quiz_id":"3","_id":"1","option_in_json": [{"option":"1","is_answer":false},{"option":"2","is_answer":true}],"question":"1+1"}]';
// ^-- don't wrap in "" so no need to escape inner double quotes.
console.dir(JSON.parse(m));