我正在从第三方发送一个生成错误的JSON字符串。我尝试使用JSON.parse(str)
将其解析为JavaScript对象,但它当然失败了。
原因是键不是字符串:
{min: 100}
与有效的JSON字符串(解析得很好)相反:
{"min": 100}
我现在需要接受形成错误的字符串。我想忘记正确引用密钥是一个常见的错误。有没有一种好方法可以将其更改为有效的JSON字符串,以便我可以解析它?现在我可能不得不逐个字符地解析并尝试形成一个对象,听起来很糟糕。
想法?
答案 0 :(得分:5)
您可以只是评估,但如果您不信任来源,那将是不好的安全措施。更好的解决方案是手动修改字符串以引用键或使用其他人编写的工具为您执行此操作(请查看daepark写的https://github.com/daepark/JSOL)。
答案 1 :(得分: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()的解决方案具有所有相同的问题,但是如果您只需要解析/重新格式化数据一次,那么上面的内容应该为您提供干净的JSON副本JS对象。
答案 2 :(得分:1)
根据JSON中的其他内容,您只需执行字符串替换,将'{'
替换为'{"'
,将':'
替换为'":'
。