当字符串在双引号中有单引号时,如何在Javascript中将该字符串转换为JSON对象
如果字符串只包含双引号,则可以如下所示进行求解-当字符串在双引号中有单引号时,如何在Javascript中将该字符串转换为JSON对象,javascript,node.js,json,reactjs,react-native,Javascript,Node.js,Json,Reactjs,React Native,如果字符串只包含双引号,则可以如下所示进行求解- 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.
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 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/'"} `
这看起来不像是有效的字符串化JSON
var s=`{'error':“没有这样的文件或目录:'../FileSystem/3434-5433-124/”}`
错误
应该用双引号括起来
var s=`{“error”:“没有这样的文件或目录:'../FileSystem/3434-5433-124/'”}`
您可以使用JSON.stringify验证它
JSON.stringify({
错误:“没有这样的文件或目录:'../FileSystem/3434-5433-124/'”
})
假设您使用的是有效的JSON。现在可以用反斜杠转义单引号
var s=`{“error”:“没有这样的文件或目录:'../FileSystem/3434-5433-124/'”}`
const parsed=JSON.parse(s.replace(/\'/g,“\'”);
console.log(已解析)
如果您知道唯一的问题是属性名是单引号,而不是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);
我们应该做到这一点。这将用双引号替换字符串中格式为(单引号)(文本)(单引号)(冒号)的任何部分的单引号,这很可能只是属性名,但请记住,如果字符串的另一部分采用这种格式,它的单引号也会被双引号替换。是的,它不是有效的字符串化JSON。实际上,这个错误来自于NodeJS应用程序中python派生的进程,在那个里我并没有太多的控制权。python捕获块中捕获的错误消息就是我正在接收的消息。