8

我收到来自第三方的格式错误的 JSON 字符串。我尝试使用JSON.parse(str)将其解析为 JavaScript 对象,但它当然失败了。

原因是键不是字符串:

{min: 100}

与有效的 JSON 字符串相反(解析得很好):

{"min": 100}

我现在需要接受格式错误的字符串。我想忘记正确引用键是一个常见的错误。有没有一种好方法可以将其更改为有效的 JSON 字符串以便我可以解析它?现在我可能不得不逐个字符地解析并尝试形成一个对象,这听起来很糟糕。

想法?

4

3 回答 3

5

您可以只进行评估,但如果您不信任来源,那将是不好的安全做法。更好的解决方案是手动修改字符串以引用键或使用其他人为您编写的工具(查看daepark 编写的https://github.com/daepark/JSOL )。

于 2013-04-19T18:13:13.370 回答
2

我最近才这样做,使用Uglifyjs评估:

var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;

var orig_code = "var myobject = " + badJSONobject;
var ast = jsp.parse(orig_code); // parse code and get the initial AST
var final_code = pro.gen_code(ast); // regenerate code

$('head').append('<script>' + final_code + '; console.log(JSON.stringify(myobject));</script>');

这在某种程度上确实很草率,并且与基于 eval() 的解决方案具有所有相同的问题,但是如果您只需要一次解析/重新格式化数据,那么上面应该为您提供 JS 对象的干净 JSON 副本.

于 2013-04-19T18:52:37.007 回答
1

根据 JSON 中的其他内容,您可以简单地进行字符串替换和替换'{'with'{"'':'with '":'

于 2013-04-19T18:01:48.700 回答