【问题标题】:Replace value in Json in Dataweave在 Dataweave 中替换 Json 中的值
【发布时间】:2016-06-22 21:17:36
【问题描述】:

mule 有效负载在 flowVars (infodata) 中

[
        {
        "status": "submitted",
        "identity": "",
        "papers": {
            "code1": "12csd3cbsdj",
            "code2": "skd02nd28dn",
            "date": "2016-06-22",
        "party": {
            "due_date": "2016-06-22",
            "personel": {
                "email": "tt@test.com",
                "value": {
                    "amount": "0.10",
                    "inflation": "HIGH"
                }
            }
        }
    }
}
]

在 Dataweave 内部, (1)如何去掉方括号? (2)如何动态替换amount和inflation的值(来自flowVars)?

【问题讨论】:

  • 您可能希望展示您已经尝试过使用 dataweave 代码的内容,以帮助人们提供提示,因为我们都是这里的编码人员...

标签: json mule mule-studio dataweave


【解决方案1】:

问题 2:您可以直接在 dataweave 中使用 flowVars,或者如果值在 url 中,您可以使用 inboundProperties 动态设置值。参考:https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation

我使用了 set 变量,您可以在其中动态精确它。此流程中使用的测试 URL:http://localhost:8083/test?inflation=HIGH

   <flow name="testFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP">

    </http:listener>
    <logger level="INFO" doc:name="Logger"/>
    <set-variable variableName="dynamicValueAmount" value="#['2']" doc:name="Variable"/>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
         %output application/json
         ---
        [
      {
    "status": "submitted",
     "identity": "",
      "papers": {     
  "party": {
    "due_date": "2016-06-22",
    "personel": {
      "email": "tt@test.com",
      "value": {
        "amount": flowVars.dynamicValueAmount,
        "inflation": inboundProperties.'http.query.params'.inflation

      }}}}}
]]]></dw:set-payload>
    </dw:transform-message>
    <object-to-string-transformer doc:name="Object to String"/>
      <set-payload value="#[ message.payload =org.mule.util.StringUtils.replace(message.payload,&quot;[&quot;,&quot;{&quot;);message.payload =org.mule.util.StringUtils.replace(message.payload,&quot;]&quot;,&quot;}&quot;)]" doc:name="Set Payload"/>
           <logger  level="INFO" doc:name="Logger"/>
    </flow>

关于问题一,我在 set Payload 中使用了外部替换功能(工作正常 - 其他方式)。我相信它可以通过使用 Dataweave 本身以标准方式实现。让我们等待答案。

【讨论】:

  • 谢谢!因此,在我的 dataweave 组件中,我只想引用如下所示的有效负载: %dw 1.0 %output application/java --- { payload }
  • 你可以参考你想要的格式的有效负载 %output application/java 或者如果你想要 Json 格式的响应 %output application/json ,如果是 xml %output application/xml。检查 dataweave 中允许的ValidTypes 的链接。 docs.mulesoft.com/mule-user-guide/v/3.7/…
  • 我不确定这是否能回答我的问题。需要明确的是,仅需要为两个字段(金额和通货膨胀)动态更改有效负载。我已更新问题以添加 DW 组件。
  • 我之前误解了你的问题,不清楚。
【解决方案2】:

我已经解决了问题 #1

%dw 1.0
%output application/java
---
{
    data:flowVars.infodata replace /(\[|\])/ with ""
}

我仍在尝试了解如何动态更改问题 #2 的有效负载内容。

【讨论】:

    【解决方案3】:
    1. 查看示例 flowVar 内容,它看起来像一个 json 对象数组。那是对的吗?如果它是数组,那么在 dataweave 中,您可以遍历 flowVars.infodata map {} 或只获取第一个对象 data: flowVars.infodata[0]
    2. 不确定动态更改内容的真正含义。 @star 展示了如何引用数据编织代码中的任何变量的方法。也许您可以添加一些您想要编辑的代码?

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多