javascript - 在 JavaScript 中解析格式错误的 JSON

标签 javascript regex json parsing

感谢您的关注!

背景

我正在编写一些使用返回格式错误的 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/

相关文章:

javascript - 在设置更新时更新自定义 slider

javascript - 阻止 Vue.js 渲染组件

正则表达式 : "Any word" pattern

c# - 匹配多行的正则表达式选项以及忽略大小写

javascript - Json 数组从 $_POST ['id' 增加我的 id 值]

c# - 无法将json解析成对象

ios - 如何在 swift 中发送带有嵌套字典的 POST 请求

javascript - dojo dgrid 树,子行位置错误

javascript - 合并两个对象然后过滤不起作用

JavaScript : Extracting the digits from different positions from a string?