如何通过将carvalue和bikeValue添加到ID(" C_05" - " B_08"/" C_07"/" C_07"/" B_06")中,如何通过结果数组和构造响应阵列进行构建响应数组保持与描述相同的desc。
JSON有效载荷请求:
{"results": [
{
"desc": "Blind",
"carValue": "05",
"bikeValue": "08"
},
{
"desc": "Deaf",
"carValue": "09",
"bikeValue": "10"
},
{
"desc": "Oxygen",
"carValue": "07"
},
{
"desc": "carbon",
"bikeValue": "06"
}]
}
最终响应应为:
{
"Response" : [
{
"id" : "C_05"-"B_08",
"description" : "Blind"
},
{
"id" : "C_09"-"B_10",
"description" : "Deaf"
},
{
"id": "C_07",
"description": "Oxygen"
},
{
"id": "B_06",
"description": "carbon"
}]
}
您可以使用迭代,汇总和脚本调解器,就像我在代理中向您展示的那样。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="proxyIterateJson"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="http,https">
<target>
<inSequence>
<payloadFactory media-type="json">
<format>
{"results": [
{
"desc": "Blind",
"carValue": "05",
"bikeValue": "08"
},
{
"desc": "Deaf",
"carValue": "09",
"bikeValue": "10"
},
{
"desc": "Oxygen",
"carValue": "07"
},
{
"desc": "carbon",
"bikeValue": "06"
}]
}
</format>
<args/>
</payloadFactory>
<iterate xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
attachPath="//jsonObject"
expression="//jsonObject/results"
id="it1"
preservePayload="true">
<target>
<sequence>
<property expression="$body//jsonObject/results/carValue"
name="carValue"
scope="default"
type="STRING"/>
<property expression="$body//jsonObject/results/bikeValue"
name="bikeValue"
scope="default"
type="STRING"/>
<property expression="$body//jsonObject/results/desc"
name="description"
scope="default"
type="STRING"/>
<script language="js">var carValue = mc.getProperty("carValue");
var bikeValue = mc.getProperty("bikeValue");
var desc = mc.getProperty("description");
var concatValue;
if(carValue == null || carValue == "") {
concatValue = "B_" + bikeValue;
} else if(bikeValue == null || bikeValue == "" ){
concatValue = "C_" + carValue;
}else {
concatValue = "C_"+ carValue + "-" + "B_" + bikeValue;
}
print("Value concatenado: "+ concatValue );
mc.setProperty("concatValue", concatValue);
mc.setPayloadJSON({"result":{"id" : concatValue,"description" : desc}});</script>
<log>
<property expression="json-eval($.result.id)" name="JSON-Payload"/>
</log>
<loopback/>
</sequence>
</target>
</iterate>
</inSequence>
<outSequence>
<property name="res" scope="default">
<ns:Response xmlns:ns="www.response.org"/>
</property>
<aggregate id="it1">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete enclosingElementProperty="res" expression="$body//result">
<log level="custom" separator=",">
<property expression="json-eval($.)" name="OUPUTSECUENSE"/>
</log>
<send/>
</onComplete>
</aggregate>
</outSequence>
<faultSequence/>
</target>
<description/>
</proxy>
这是响应
{"Response":
{"result":[
{"id":"C_09-B_10","description":"Deaf"},
{"id":"C_05-B_08","description":"Blind"},
{"id":"C_07","description":"Oxygen"},
{"id":"B_06","description":"carbon"}
]}}
您也可以使用自定义或PayloadFactory调解器生成JSON响应
https://docs.wso2.com/display/esb500/writing a wse2 esb mediator