2017-05-06 66 views
0

我需要在不同的json有效載荷中查找AccountNo字段值。 AccountNo可以存儲在json載荷的任何級別。我需要檢查AccountNo是否存在,然後在記錄器中打印值。尋找JSON hashmap中的特定數據

我正在使用下面的richher,但我想通過mule中的Hashmap迭代來檢查AccountNo鍵是否存在於任何地方,然後獲取值。

另請建議,如果有任何其他方式來解析json本身。 在xpath中「// AccountNo」將在整個xml文檔中查找AccountNo。我追求類似的東西。

<enricher target="#[flowVars.myJsonMap]" doc:name="Message Enricher"> <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> </enricher> <logger message="#[flowVars.myJsonMap.employees[0].AccountNo]" level="INFO" doc:name="Logger"/> </flow>

請看以下例子JSON有效載荷

{ 
"Account": { 
"AccountName": "John", 
"AccountNo": "4234324" 
} 
} 

{ 
"Order": { 
"OrderId": "34234242", 
"ServiceOrder": [ 
    { 
    "AccountNo": "231232", 
    "ServiceOrderId": "54654698787" 
    }, 
    { 
    "AccountNo": "231232", 
    "ServiceOrderId": "78979879797" 
    } 
    ] 
    } 

回答

0

自一個HashMap

可以使用yourmap.get(keyvalue)中獲取價值。

<logger message="#[flowVars.myJsonMap.yourkey?]" level="INFO" doc:name="Logger"/> 
+0

在這種情況下,我不知道我的密鑰將嵌套在哪裏。請在我的原始評論中找到上面的示例負載。 – user3366906

0

從你的問題,我認爲以下幾點:

  • 你的有效載荷包含嵌套的地圖和列表以及其他對象
  • AccountNo可能在你的有效載荷的任何水平存在

您可以使用Groovy變換器遞歸解析您的有效載荷並收集列表中的所有現有AccountNo:

//recursively parse any Map or List in myObject 
//and store AccountNo objects accountNoList 
def parseObject(myObject, accountNoList) { 
    if (myObject instanceof java.util.Map) { 
    //if Map, check for AccountNo field 
    if(myObject.AccountNo != null){ 
     accountNoList.add(myObject.AccountNo) 
    } 

    //seek for more AccountNo in Map 
    for(e in myObject) { 
     parseObject(e.value, accountNoList) 
    } 
    } else if (myObject instanceof java.lang.Iterable) { 
    //if Iterable, parse each values 
    for (value in myObject) { 
     parseObject(value, accountNoList) 
    } 
    } 
} 

myJsonPayload = message.getInvocationProperty('myJsonPayload') 
myAccountNoList = [] //init an empty list which will be filled 
parseObject(myJsonPayload, myAccountNoList) 
return myAccountNoList 

然後只需使用一個記錄器。

+0

我可以使用java來做同樣的事情嗎? – user3366906

0

如果您沒有處理大量的json數據,只需使用JSONToXMLTransformer將json轉換爲XMl,然後使用XPATH在文檔中的任意位置查找數據即可。這樣,你可以避免編寫任何額外的代碼來解析json文件。

+0

與嵌套json標籤JSON到XML轉換器我發現不會返回完整的有效載荷。 – user3366906

+0

您能否提供您的json有效載荷的「帳戶」標籤重複?我在過去做了一些事情來使用dataweave遞歸地解析json。我將檢查相同的代碼是否適用於您的有效載荷。 –

+0

我在上面的原始註釋中添加了示例有效載荷。謝謝。 – user3366906