在JSON中用反斜杠加双引号替换双引号

3
假设我有这个简单的JSON:
{"test":"test"}

现在我想将其转换为以下格式:
{\"test\":\"test\"}

我发现了一些替换双引号为反斜杠和双引号的解决方案,但这些都是针对文本格式的。

我需要将这种格式作为消息参数传递给AWS SNS。


可以尝试使用JSON.stringify(JSON.stringify({"test":"test"})); - undefined
@Andreas 当我使用JSON.stringify()方法将简单的JSON对象发送到AWS SNS时,它给了我一个错误。所以我需要对JSON进行编码。 - undefined
3
@Hacketo:我明白了,所以实际的问题应该更像是:“如何将自定义负载作为消息传递给AWS SNS”,那么这个问题可能是https://dev59.com/X2Mk5IYBdhLWcg3w7CKX的重复。 - undefined
@ Duncan 当我使用 JSON.stringify() 时,它将以文本格式显示为 {"test": "test"},但这在 SNS 中是不可接受的。 - undefined
@Andreas 但在那个问题中,他们通过PHP向SNS发送请求,但我想用JavaScript实现。所以这可能对那些有相同问题但是使用PHP的人有帮助。 - undefined
显示剩余3条评论
2个回答

3

您可以使用JSON.stringify()将JSON对象首先转换为字符串格式。

var temp = {"test":"test"};
var tempStr = JSON.stringify(temp);
console.log(tempStr); //> {"test":"test"}
var modifiedStr = tempStr.replace(/"/g, '\\"');
console.log(modifiedStr); //> {\"test\":\"test\"}

如果您只想编码开放和关闭双引号,可以尝试以下方法

var temp = {"test":'te"st'};
var tempObj = JSON.parse(JSON.stringify(temp));

for(var k in tempObj){
    tempObj[k]=tempObj[k].replace(/"/g, "<DOUBLE_QUOTES_4594>");
}

var tempStr = JSON.stringify(tempObj);  
console.log(tempStr); //> {"test":"te<DOUBLE_QUOTES_4594>st"}

var modifiedStr = tempStr.replace(/"|"/g, '\\"').replace(/<DOUBLE_QUOTES_4594>/g, '"');
console.log(modifiedStr); //> {\"test\":\"te"st\"}

我不确定AWS SNS接受什么格式,请告诉我如果你知道的话。 - undefined

3

如我在评论中提到的那样,您可以使用 JSON.stringify 两次将 Javascript object 转换为 escaped JSON

var myObject = {"test":"test"};

var myJson = JSON.stringify(myObject); // {"test":"test"}

var myEscapedJson = JSON.stringify(myJson); // "{\"test\":\"test\"}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接