how to iterate JSON payload and construct the response in wso2

冷暖自知 提交于 2019-12-10 23:13:09

问题


How to iterate through results array and construct Response array by adding carValue and bikeValue into id ("C_05"-"B_08"/"C_07"/"B_06") of the Response array and keep the same desc as description.

JSON Payload Request:

{"results": [
      {
      "desc": "Blind",
      "carValue": "05",
      "bikeValue": "08"
   },
      {
      "desc": "Deaf",
      "carValue": "09",
      "bikeValue": "10"
   },
{
      "desc": "Oxygen",
      "carValue": "07"
   },
{
      "desc": "carbon",
      "bikeValue": "06"
   }]
}

final Response should be:

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

回答1:


You can use the iterate, aggregate and script mediators, as I show you in this proxy.

<?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>

This is the response

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

You can also use custom or payloadFactory mediator to generate the Json response

https://docs.wso2.com/display/ESB500/Writing+a+WSO2+ESB+Mediator



来源:https://stackoverflow.com/questions/42290694/how-to-iterate-json-payload-and-construct-the-response-in-wso2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!