在JSON中的键上缺少引号

时间:2014-06-12 02:57:58

标签: javascript regex json node.js

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

我也看了jsonrepair,但没有取得多大成功。

2 个答案:

答案 0 :(得分:5)

这应该这样做。你需要做的就是确定冒号后面跟着一个正斜杠(比如http://)而不是孤立的。请注意,如果您的某个JSON值中包含冒号,则会失败,因此可能需要对您的用例进行更多改进。

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

答案 1 :(得分:5)

如果JSON唯一不对的是没有引号的属性名称,那么它仍然是一个有效的JavaScript对象文字,即使它不是有效的JSON。

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

这比任何正则表达式都更简单,更可靠。

示例:

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