var div = document.getElementById("result");
var str = "{'a':1}";
str = str.replace(/\'/g, '"');
var parsed = JSON.parse(str);
console.log(parsed);
div.innerText = parsed.a;
// regex uses look-forwards and look-behinds to select only single-quotes that should be selected
const regex = /('(?=(,\s*')))|('(?=:))|((?<=([:,]\s*))')|((?<={)')|('(?=}))/g;
str = str.replace(regex, '"');
str = JSON.parse(str);
9条答案
按热度按时间dldeef671#
JSON standard需要双引号,不接受单引号,解析器也不接受。
如果字符串中没有转义单引号(这通常是不可能的,但这不是JSON),那么可以简化
str.replace(/'/g, '"')
,最终应该得到有效的JSON。fykwrbwg2#
我知道这是一篇老文章,但是您可以使用JSON5来实现此目的。
s2j5cfk03#
如果您确信JSON在您的控制之下(而不是用户输入),那么您可以简单地评估JSON。Eval接受所有引用类型以及未引用的属性名。
由于eval解析器的工作方式,额外的括号是必需的。当Eval用于您可以控制的数据时,它并不是坏事。有关JSON.parse和eval()之间的差异的更多信息,请参见JSON.parse vs. eval()
5hcedyr04#
JSON中不允许使用单引号作为键。您需要使用双引号。
对于您的用例,这可能是最简单的解决方案:
资料来源:
如果属性需要引号,则必须使用双引号。所有属性名称都必须用双引号括起来。
axzmvihb5#
这为我解决了问题。
rdrgkggo6#
大概是这样的
laximzn57#
其他答案在足够多的情况下都不起作用,例如上面引用的案例:
"title": "Mama's Friend"
,它会很天真地转换撇号,除非您使用regex。JSON5会希望删除单引号,从而引入类似的问题。警告:虽然我相信这是兼容的所有情况下,将合理地出现,并工程往往比其他答案,它仍然可以打破理论。
whlutmcx8#
如果您假设将显示单引号中的值,则应改为:
您可以使用以下命令保持单引号的显示:
型
它是
single quote
的HTML等价物。olmpazwi9#