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
}
}
我正在尝试生成以下 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
}
}