感谢您的关注!
背景
我正在编写一些使用返回格式错误的 JSON 的 JSON 服务的前端代码。具体来说,键没有用引号引起来:
{foo: "bar"}
我无法控制该服务,因此我正在更正此问题:
var scrubbedJson = dirtyJson.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');
这给了我格式良好的 JSON:
{"foo": "bar"}
问题
但是,当我调用 JSON.parse(scrubbedJson)
时,我仍然会遇到错误。我怀疑这可能是因为整个 JSON 字符串都用双引号引起来,但我不确定。
更新
这已经解决了——上面的代码工作正常。我在返回的 JSON 正文中有一个恶意单引号。我把它弄出来了,现在一切都解析了。谢谢。 任何帮助将不胜感激。
最佳答案
您可以完全避免使用正则表达式并仍然从格式错误的 JSON 字符串(不带引号的键、单引号等)输出 JavaScript 对象,使用这个简单的技巧:
var jsonify = (function(div){
return function(json){
div.setAttribute('onclick', 'this.__json__ = ' + json);
div.click();
return div.__json__;
}
})(document.createElement('div'));
// Let's say you had a string like '{ one: 1 }' (malformed, a key without quotes)
// jsonify('{ one: 1 }') will output a good ol' JS object ;)
这是一个演示: http://codepen.io/csuwldcat/pen/dfzsu (打开你的控制台)
关于javascript - 在 JavaScript 中解析格式错误的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280279/