【问题标题】:How to replace backslash in Dataweave Mule 4如何在 Dataweave Mule 4 中替换反斜杠
【发布时间】:2021-03-06 05:16:07
【问题描述】:

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

我的有效载荷是

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

【问题讨论】:

    标签: dataweave mule4


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-09-09
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 2012-04-14
        相关资源
        最近更新 更多