问题描述
嗨,喜欢用空字符替换反斜杠。
我的有效载荷是
{
"id" : 1234567,"requestDate" : "2021/02/02","responseXML" : "<DRIVEResponse ResponseDateTime=\"2/15/2021 10:09:10 AM\" TimeZone=\"EST\">",}
我尝试了一些方法,但似乎没有任何效果,我不确定我在做什么错误。
payload.responseXML replace "\" with ""
我的预期回复是
<DRIVEResponse ResponseDateTime="2/15/2021 10:09:10 AM" TimeZone="EST">
解决方法
这就是您的 " 在由 "" 包围的字符串中转义的方式。
\"
在最终字符串中呈现为 "。请参阅下面的屏幕截图并注意 \"
在 " 确实在句子中被替换了。
看起来错误是试图删除反冲字符 (\
)。它是转义 JSON 字符串中的双引号字符所需的 JSON 转义字符。请注意, responseXML 包含一个包含 XML 值的字符串作为其值。 XML 在属性值周围使用引号。在 JSON 字符串中表示那些的唯一方法是转义。这是 JSON 标准定义的预期行为。除非您使用不兼容的 JSON 解析器处理它,否则它应该没问题。如果在某个时候您需要将该字符串作为 XML 进行评估,则生成的 XML 不会有强烈反应。
例如,我将使用您的输入数据读取 responseXML。但是请注意,XML 格式不正确,因为它缺少结束标记。我刚刚添加了一个正斜杠 (/
) 来关闭标签:
%dw 2.0
output application/xml
---
read(payload.responseXML,"application/xml")
输入有效载荷:
{
"id" : 1234567,"requestDate" : "2021/02/02","responseXML" : "<DRIVEResponse ResponseDateTime=\"2/15/2021 10:09:10 AM\" TimeZone=\"EST\" />"
}
输出:
<?xml version='1.0' encoding='UTF-8'?>
<DRIVEResponse ResponseDateTime="2/15/2021 10:09:10 AM" TimeZone="EST"/>
其实还有一个选择。如果您可以控制 XML 的生成,则可以使用单引号。 XML 标准允许使用单引号或双引号。不过我不建议这样做。看起来它是为了在其他组件中隐藏问题。这对我来说是一种不好的做法。