Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON中的键缺少引号_Javascript_Regex_Json_Node.js - Fatal编程技术网

Javascript JSON中的键缺少引号

Javascript JSON中的键缺少引号,javascript,regex,json,node.js,Javascript,Regex,Json,Node.js,我有一个字符串,其中包含格式错误的JSON,提供给我的键缺少引号。JSON的结构超出了我的控制范围,因此我需要使用我所拥有的。 我已经找到了OP发布的解决方案,但是其中一个值包含一个与正则表达式匹配的URL,并将其转换为另一个类似键的值,从而导致JSON真正崩溃。有什么想法吗 我也看过,但没有太大的成功。这应该可以。您所需要做的就是确定冒号后面是正斜杠(如http://)而不是孤立的。请注意,如果您的JSON值中有一个冒号,这将失败,因此可能需要对您的用例进行更多改进 .replace(/(['

我有一个字符串,其中包含格式错误的JSON,提供给我的键缺少引号。JSON的结构超出了我的控制范围,因此我需要使用我所拥有的。 我已经找到了OP发布的解决方案,但是其中一个值包含一个与正则表达式匹配的URL,并将其转换为另一个类似键的值,从而导致JSON真正崩溃。有什么想法吗


我也看过,但没有太大的成功。

这应该可以。您所需要做的就是确定冒号后面是正斜杠(如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”
)。我正在用正确的代码更新答案,以防有空格,这样你就不会得到双引号了。