当字符串在双引号内有单引号时,如何在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对象的主要内容,如果未能解决你的问题,请参考以下文章