Mule 在JSON hashmap中查找特定数据

Mule 在JSON hashmap中查找特定数据,mule,mule-studio,mule-component,mule-el,Mule,Mule Studio,Mule Component,Mule El,我需要在不同的json有效负载中查找AccountNo字段值。AccountNo可以存在于json负载中的任何级别。我需要检查AccountNo是否存在,然后在logger中打印值 我正在使用下面的enricher,但我想在mule中迭代Hashmap,检查AccountNo key是否存在,然后获取值 另外,请建议是否有其他方法来解析json本身。 在xpath中“//AccountNo”将在整个xml文档中查找AccountNo。我想要类似的东西 请查找下面的json有效负载示例 { "

我需要在不同的json有效负载中查找AccountNo字段值。AccountNo可以存在于json负载中的任何级别。我需要检查AccountNo是否存在,然后在logger中打印值

我正在使用下面的enricher,但我想在mule中迭代Hashmap,检查AccountNo key是否存在,然后获取值

另外,请建议是否有其他方法来解析json本身。 在xpath中“//AccountNo”将在整个xml文档中查找AccountNo。我想要类似的东西


请查找下面的json有效负载示例

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

{
"Order": {
"OrderId": "34234242",
"ServiceOrder": [
  {
    "AccountNo": "231232",
    "ServiceOrderId": "54654698787"
  },
  {
    "AccountNo": "231232",
    "ServiceOrderId": "78979879797"
  }
  ]
  }
因为它是一个hashmap

您可以使用
yourmap.get(keyvalue)
获取值

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

根据您的问题,我假设:

  • 您的负载包含嵌套的映射和列表以及其他对象
  • AccountNo可能存在于任何级别的有效负载
您可以使用Groovy transformer递归解析负载,并收集列表中所有现有的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

然后只需使用记录器。

如果您不处理大量json数据,只需使用JSONToXMLTransformer将json转换为XMl,然后使用XPATH在文档中的任何位置查找数据。通过这种方式,您可以避免编写任何额外的代码来解析json文件。

我可以使用java做同样的事情吗?使用嵌套的json标记,我发现json-to-xml transformer不会返回完整的负载。您可以在重复“account”标记的地方提供json负载吗??我过去曾使用dataweave递归解析json。我将检查相同的代码是否适用于您的有效负载。我在上面的原始注释中添加了示例有效负载。谢谢。在这种情况下,我不知道我的密钥将嵌套在哪里。请在我的原始评论中找到上面的示例有效负载。