如何在 Dataweave Mule 4 中替换反斜杠

问题描述

嗨,喜欢用空字符替换反斜杠。

我的有效载荷是

{
"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">

解决方法

这就是您的 " 在由 "" 包围的字符串中转义的方式。

\" 在最终字符串中呈现为 "。请参阅下面的屏幕截图并注意 \"" 确实在句子中被替换了。

enter image description here

,

看起来错误是试图删除反冲字符 (\)。它是转义 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 标准允许使用单引号或双引号。不过我不建议这样做。看起来它是为了在其他组件中隐藏问题。这对我来说是一种不好的做法。