复杂的json数组上的Javascript eval失败了

时间:2015-06-15 01:33:32

标签: javascript json eval

我想通过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但没有运气

1 个答案:

答案 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));

enter image description here