Javascript JSON中的键缺少引号
我有一个字符串,其中包含格式错误的JSON,提供给我的键缺少引号。JSON的结构超出了我的控制范围,因此我需要使用我所拥有的。 我已经找到了OP发布的解决方案,但是其中一个值包含一个与正则表达式匹配的URL,并将其转换为另一个类似键的值,从而导致JSON真正崩溃。有什么想法吗Javascript JSON中的键缺少引号,javascript,regex,json,node.js,Javascript,Regex,Json,Node.js,我有一个字符串,其中包含格式错误的JSON,提供给我的键缺少引号。JSON的结构超出了我的控制范围,因此我需要使用我所拥有的。 我已经找到了OP发布的解决方案,但是其中一个值包含一个与正则表达式匹配的URL,并将其转换为另一个类似键的值,从而导致JSON真正崩溃。有什么想法吗 我也看过,但没有太大的成功。这应该可以。您所需要做的就是确定冒号后面是正斜杠(如http://)而不是孤立的。请注意,如果您的JSON值中有一个冒号,这将失败,因此可能需要对您的用例进行更多改进 .replace(/(['
我也看过,但没有太大的成功。这应该可以。您所需要做的就是确定冒号后面是正斜杠(如http://)而不是孤立的。请注意,如果您的JSON值中有一个冒号,这将失败,因此可能需要对您的用例进行更多改进
.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:([^\/])/g, '"$2":$4');
如果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
试试看。价值观总是有双引号吗?谢谢你的回答,迈克尔,不幸的是我不相信任何人:)为什么我没想到?!谢谢dan。重新阅读我的答案,我意识到当我将引号添加到第二个参数的末尾时,我假设值紧跟在冒号后面(
key:“value”
vs.key:“value”
)。我正在用正确的代码更新答案,以防有空格,这样你就不会得到双引号了。