parsing不正常形成的JSONstring
我正从第三方发送一个不正常的JSONstring。 我尝试使用JSON.parse(str)
来parsing它到一个JavaScript对象,但它当然失败了。
原因是钥匙不是string:
{min: 100}
与有效的JSONstring(parsing得很好)相反:
{"min": 100}
现在我需要接受形成不良的string。 我想象忘记正确引用键是一个常见的错误。 有没有一种好的方法来改变这个有效的JSONstring,以便我可以parsing它? 现在我可能不得不逐字分析字符,试着形成一个听起来很糟糕的对象。
想法?
你可以只是评估,但如果你不信任源代码,这将是不好的安全做法。 更好的解决scheme是手动修改string来引用键或者使用别人写的工具来为你做这件事(检查daepark写的https://github.com/daepark/JSOL)。
我刚刚做了这个,使用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()的解决scheme相同的问题,但如果你只需要parsing/重新格式化数据一次,那么上述应该得到一个干净的JS对象的JSON副本。
根据JSON中的其他内容,您可以简单地进行stringreplace,并用'{'
replace'{'
和'{"'
和'":'
。