替换Dataweave中Json中的值

时间:2016-06-22 21:17:36

标签: json mule mule-studio dataweave

mule有效载荷在flowVars(信息数据)中

[
        {
        "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"
                }
            }
        }
    }
}
]

Inside Dataweave, (1)如何拆除方括号? (2)如何动态替换金额和通胀值(来自flowVars)?

3 个答案:

答案 0 :(得分:0)

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

我使用了set变量,你可以在其中动态地确定它。在此流程中使用的测试网址: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本身以标准方式实现。让我们等待答案。

答案 1 :(得分:0)

我已经解决了问题#1

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

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

答案 2 :(得分:0)

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