【问题标题】:missing quotation marks on keys in JSONJSON中的键缺少引号
【发布时间】:2014-08-02 06:29:58
【问题描述】:

我有一个包含格式错误的 JSON 的字符串,该字符串提供给我,其中的键缺少引号。 JSON 的结构是我无法控制的,所以我需要使用我所拥有的。 我找到了 OP 在Parsing malformed JSON in JavaScript 中发布的解决方案,但是其中一个值包含一个正则表达式匹配的 URL,并将其转换为另一个类似值的键,从而导致 JSON 非常损坏。有什么想法吗?

我也看过jsonrepair,但在那里没有取得多大成功。

【问题讨论】:

标签: javascript regex json node.js


【解决方案1】:

如果 JSON 唯一的问题是不带引号的属性名称,那么即使它不是有效的 JSON,它仍然是有效的 JavaScript 对象字面量。

所以,如果您信任来源,您可以将文本括在括号中并eval

这将比任何正则表达式更简单、更可靠。

例子:

var badJSON = '{ a: "b" }';
var obj = eval( '(' + badJSON + ')' );
console.log( obj );    // Logs: Object {a: "b"}
console.log( obj.a );  // Logs: b

【讨论】:

  • 感谢迈克尔的回复,不幸的是我不信任任何人 :)
【解决方案2】:

应该这样做。您需要做的就是识别冒号后跟正斜杠(如在 http:// 中)而不是孤立的。请注意,如果您的 JSON 值中包含冒号,这将失败,因此您的用例可能需要更多改进。

.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:([^\/])/g, '"$2":$4');

【讨论】:

  • 我怎么没想到?!谢谢丹。
  • 刚刚重新阅读我的答案,我意识到当我将引号添加到第二个参数的末尾时,我假设该值紧跟在冒号后面(key:"value" vs. key: "value")。如果那里有空格,我会用正确的代码更新答案,所以你不会得到双引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2021-10-17
  • 2014-10-20
  • 2012-06-24
相关资源
最近更新 更多