2017-02-17 46 views
1

如何通過結果陣列迭代並通過添加carValue和bikeValue到ID構建響應陣列的響應 - 的(「C_05」「B_08」 /「C_07」 /「B_06」)響應數組並保持與描述相同的描述。如何遍歷JSON有效載荷和構建WSO2

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" 
    }] 
} 
+0

? –

+0

它的wso2esb-5.0.0 – sam

+0

你可以使用Datamapper中介:https://docs.wso2.com/display/ESB500/WSO2+ESB+Data+Mapper+JSON+Schema+Specification –

回答

4

可以使用迭代,骨料和腳本調解員,因爲我告訴你在這個代理。

<?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+WSO2+ESB+Mediator

您正在使用哪個WSO2ESB的版本
+0

感謝您的回答,將在我的空閒時間嘗試您的解決方案。我嘗試使用簡單的腳本調解器,並從API調用它,併爲其工作。 – sam