2015-09-11 38 views
0

我與wso2esb 4.9.0和Wso2dss3.0.0JSON路徑

我從DSS服務SOAP響應如下圖所示

<soapenv:Header/> 
    <soapenv:Body> 
     <DataCollection xmlns="http://ws.wso2.org/dataservice"> 
     <Datalist> 
      <partybranchid>2127629166052452</partybranchid> 
      <partybranchname>other locations</partybranchname> 
      <status>1</status> 
      <partybranchtype>-1</partybranchtype> 
      <partyid>460077453499443</partyid> 
      <partyname>Yash Technologies Pvt Ltd</partyname> 
      <ouid>-1</ouid> 
      <organizationunitname>NONE</organizationunitname> 
      <inchargeid>-1899999899</inchargeid> 
      <sbuheadid>-1</sbuheadid> 
      <usercriteriaconfigid>1187416899913503</usercriteriaconfigid> 
      <primarymail>[email protected]</primarymail> 
     </Datalist> 
     <Datalist> 
      <partybranchid>2545910581364239</partybranchid> 
      <partybranchname>DBPB001</partybranchname> 
      <status>1</status> 
      <partybranchtype>2299733851146138</partybranchtype> 
      <partyid>2534954639984412</partyid> 
      <partyname>DBPRTY001</partyname> 
      <ouid>2538210579514587</ouid> 
      <organizationunitname>DBORG001</organizationunitname> 
      <inchargeid>2540093122446574</inchargeid> 
      <sbuheadid>1209449655666077</sbuheadid> 
      <usercriteriaconfigid>1187416899913503</usercriteriaconfigid> 
      <primarymail>[email protected]</primarymail> 
     </Datalist> 
     </DataCollection> 
    </soapenv:Body> 

從工作上面的SOAP響應中,Iwant將獲得總數爲Datalist的記錄到我的服務中。爲此,我給了一個JSON文件屬性如下圖所示:

<property name="Total" 
      expression="json-eval($.DataCollection.Datalist.length)" 
      scope="default" 
      type="STRING"/> 

Total應該得到的值作爲2,因爲他們是兩個記錄,你可以看到;但是這是返回null。我認爲我給的JSON路徑不起作用。

什麼是正確的JSON路徑來計算記錄的數量?

回答

1

它實際上看起來像您從DSS接收XML文檔。這就是爲什麼json函數不適用於xml內容。我設法使用腳本中介

<script language="js">var dl = mc.getPayloadXML()..*::Datalist; 
    var cnt = dl.length(); 
    mc.setProperty("cnt", cnt); 
</script> 
<log level="full"> 
    <property name="cnt" expression="get-property('cnt')"/> 
</log> 

得到的元素數作爲導致身體方面與名稱「CNT」和值「」

可以說你變換üXML消息的獲取屬性到JSON和得到這個JSON有效載荷(完全有效的)

{"DataCollection": [ 
    {"Datalist": { 
      "partybranchid": 2127629166052452, 
      "partybranchname": "other locations", 
      "status": 1, 
      "partybranchtype": -1, 
      "partyid": 460077453499443, 
      "partyname": "Yash Technologies Pvt Ltd", 
      "ouid": -1, 
      "organizationunitname": "NONE", 
      "inchargeid": -1899999899, 
      "sbuheadid": -1, 
      "usercriteriaconfigid": 1187416899913503, 
      "primarymail": "[email protected]" 
     } 
    }, 
    {"Datalist": { 
      "partybranchid": 2545910581364239, 
      "partybranchname": "DBPB001", 
      "status": 1, 
      "partybranchtype": 2299733851146138, 
      "partyid": 2534954639984412, 
      "partyname": "DBPRTY001", 
      "ouid": 2538210579514587, 
      "organizationunitname": "DBORG001", 
      "inchargeid": 2540093122446574, 
      "sbuheadid": 1209449655666077, 
      "usercriteriaconfigid": 1187416899913503, 
      "primarymail": "[email protected]" 
     } 
    } 
] 
} 

然後JSONPATH表達

$.DataCollection.length 

返回數組的值的長度,在這種情況下等於 「2」

有用的鏈接

,或者提供ù有效載荷中json格式。

+0

嗨,這實際上工作,但我想在JSON payloadfactory調解器中傳遞此值,所以我怎麼能做到這一點,而不是使用腳本調解器是否有任何直接的JSONpath來計算元素的數量。 – user4045063

+0

只需獲得Datalist的數量,然後將消息傳遞給JSON有效載荷控制器,那麼您將在身體環境中具有與Datalist項目的總數相關的屬性,並且可以在JSON有效載荷調解器中使用。 – simar

+0

嗨simar其實我正在尋找設置JSONpath的屬性來獲取Datalist元素的計數,以便我可以在我的JSON負載中傳遞此值,你有任何想法如何設置此屬性與JSONpath – user4045063