为什么当eval()像超级按钮一样工作时JSON.parse失败?

时间:2018-08-26 15:33:27

标签: javascript json node.js

由于某种原因,当我尝试使用JSON.parse()时,这种格式化的JSON总是对我失败。

   let string = '[{"appearances":{"0":[138545,""],"1":[138547,""],"3":[138548,""]},"bonustrees":[240,241,264],"classs":2,"displayid":138545,"dps":18.67,"flags2":8192,"id":113965,"level":138,"name":"4Sorkas Chainfist","reqlevel":100,"slot":13,"slotbak":13,"source":[2],"sourcemore":[{"bd":1,"z":6967}],"specs":[269,581,260,263,577],"speed":2.60,"subclass":13,modes:{"mode":458752,"4":{"count":229,"outof":21731},"65536":{"count":28,"outof":4490},"131072":{"count":18,"outof":4719},"262144":{"count":183,"outof":3517}},count:229,stack:[1,1]}]';

   console.log(eval(string)); // Output as expected from JSON.parse
   console.log(JSON.parse(string)); // SyntaxError: Unexpected token m in JSON at position 341

1 个答案:

答案 0 :(得分:3)

JSON.parse失败,因为它只能处理JSON语法。您的字符串不是有效的JSON,它在收到的错误消息中表示是这样。

错误指向此部分m中的modes

"subclass":13,modes:{"mode":458752,

您还会在行尾缺少更多报价;您可能想检查一下。


eval执行以字符串形式传递的JavaScript代码-就像您在运行该函数的位置将其编写为代码一样。由于您的字符串是有效的JavaScript,因此可以正常工作。