如何迭代JSON有效载荷并在WSO2中构建响应



如何通过将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": [&#xD;
                                                  {&#xD;
                                                  "desc": "Blind",&#xD;
                                                  "carValue": "05",&#xD;
                                                  "bikeValue": "08"&#xD;
                                           },&#xD;
                                                  {&#xD;
                                                  "desc": "Deaf",&#xD;
                                                  "carValue": "09",&#xD;
                                                  "bikeValue": "10"&#xD;
                                           },&#xD;
                                        {&#xD;
                                                  "desc": "Oxygen",&#xD;
                                                  "carValue": "07"&#xD;
                                           },&#xD;
                                        {&#xD;
                                                  "desc": "carbon",&#xD;
                                                  "bikeValue": "06"&#xD;
                                           }]&#xD;
                                        }
                        </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

最新更新