JSON 在 Mule 中使用 TransformMessage 生成

JSON generation using TransformMessage in Mule

我正在尝试生成以下 JSON ...

{ "myVariable": [ { "LoopId": "2" }, { "LoopId": "3" }, { "LoopId": "4" } ] }

并且能够使用 class 代码实现这一点...使用 Java 节点(在 Mule 中)

package com.mule.integrations.pakage;

public class CreateJsonPayload {
public String generateJsonPayload(String last) {

 int lastInt = Integer.parseInt(last);      
 String jsonPayload = "{ \"MyVariable\" : [ ";

 for (int i=1; i <= lastInt; i++) {         
     jsonPayload = jsonPayload + "{ \"LoopId\":\"" + i + "\" }";
     if (i < lastInt) jsonPayload = jsonPayload + ",";
 }

 jsonPayload = jsonPayload + " ]}";     
 return jsonPayload;
}


}

因为我必须根据变量生成这个 JSON,在 JSON 中有 "LoopId" 个节点。

例如,varNumberOfLoops = 5,我需要生成 {"LoopId":"1"} 到 5。

如果我想使用 DataWeave 通过 "TransformMessage" 节点生成相同的内容,我该怎么做?

感谢任何对此的指点。

下面的代码将为您提供解决方案。希望对您有所帮助。

<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
    <set-variable variableName="myVar" value="#[message.payload.myVariable]" doc:name="myVar"/>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
 %output application/json
 %var a=flowVars.myVar
 ---
  "myVariable":
 [1 .. a] map {
     "LoopId"    : $
 }]]></dw:set-payload>
        </dw:transform-message>
        <logger message="JSONNNNN #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>

输出为::

{
"myVariable": [
    {
        "LoopId": 1
    },
    {
        "LoopId": 2
    },
    {
        "LoopId": 3
    }
]

}

根据您的要求尝试此代码。

从 POSTMan 发送这个请求

{ "myVariable":3 }

然后下面是流程

<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8088" basePath="/config" doc:name="HTTP Listener Configuration"/>

<flow name="TestFlow" >
   <http:listener config-ref="HTTP_Listener_Configuration" path="/testXml" allowedMethods="POST" doc:name="HTTP"/>
    <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
    <set-variable variableName="myVar" value="#[message.payload.myVariable]" doc:name="myVar"/>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
 %output application/json
 %var a=flowVars.myVar
 ---
  "myVariable":
 [1 .. a] map {
     "LoopId"    : $
 }]]></dw:set-payload>
        </dw:transform-message>
        <logger message="JSONNNNN #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>   


</flow>

下面是回复。

{
"myVariable": [
    {
        "LoopId": 1
    },
    {
        "LoopId": 2
    },
    {
        "LoopId": 3
    }
]

}

这对你有用..

 %dw 1.0
 %output application/json
 %var resultStart = '1' as :number
 %var resultEnd = flowVars.varNumberOfLoops as :number
 %var range = [[resultStart][0] .. [resultEnd][0]]
 ---
 {
     "myVariable": range map {
         "LoopId"    : $ as :string
     }
 }