2017-05-06 65 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