当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象

Posted

技术标签:

【中文标题】当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象【英文标题】:How to convert this String to JSON object in Javascript, when the string has single quote within the double quote 【发布时间】:2021-01-21 18:35:46 【问题描述】:

如果字符串只包含双引号,可以像下面这样解决-

var str=`"name":"javascript"`;
var jsonObj=JSON.parse(str) //Works

如果字符串只包含单引号,则可以如下解决-

var str = "'result': ['def', 'abc', 'xyz']";
str = str.replace(/'/g, '"');
var res = JSON.parse(str);
console.log(res.result);

但是我们如何转换下面的字符串,双引号里面有单引号-

var s=`'error': "No such file or directory: '../FileSystem/3434-5433-124/'" ` 

【问题讨论】:

【参考方案1】:

这看起来不像是一个有效的字符串化 JSON。

var s=`'error': "No such file or directory: '../FileSystem/3434-5433-124/'" ` 

error 应该用双引号括起来。

var s=`"error": "No such file or directory: '../FileSystem/3434-5433-124/'" ` 

您可以使用 JSON.stringify 验证它

JSON.stringify(
  error: "No such file or directory: '../FileSystem/3434-5433-124/'"
)

假设您使用的是有效的 JSON。您现在可以使用反斜杠转义单引号。

var s = `"error": "No such file or directory: '../FileSystem/3434-5433-124/'"` 
const parsed  = JSON.parse(s.replace(/\'/g, "\'"));
console.log(parsed)

【讨论】:

是的,它不是有效的字符串化 JSON。实际上,该错误来自 NodeJS 应用程序的 python 衍生进程,我没有太多控制权。在 python catch 块中捕获的错误消息是我收到的。【参考方案2】:

如果您知道唯一的问题是属性名称是单引号而不是 JSON 所需的双引号,您可以使用正则表达式将属性名称上的单引号替换为双引号。

var s=`'error': "No such file or directory: '../FileSystem/3434-5433-124/'" ` 
const regex = /(')(\S*)('):/g
s = s.replace(regex, '"$2":')
const workingJson = JSON.parse(s);

应该做的伎俩。对于格式为(单引号)(文本)(单引号)(冒号)的字符串的任何部分,这将用双引号替换单引号,这很可能只是属性名称,但请记住,如果您的字符串遵循这种确切的格式,它也会将单引号替换为双引号。

【讨论】:

以上是关于当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象的主要内容,如果未能解决你的问题,请参考以下文章

一下就明白的print函数和input函数

sql语句中有单引号怎么办

如何插入包含单引号的字符串

onclick方法参数中有单引号双引号空格

如何在双引号中打印字符串? (不打印双引号)

如何在双引号字符串中使用对象的属性?