查询 json 的最佳方法是将其转换为 Map。
<json:json-to-object-transformer returnClass="java.util.HashMap" />
然后使用像标准 MVEL 或 Java 语法一样的 MEL 进行查询
<logger message="#[payload.People[0].Details.email]" level="INFO" />
如果您想保持原始 json 有效负载完整,可以使用丰富器将映射存储在变量中:
<enricher target="#[flowVars.myJsonMap]">
<json:json-to-object-transformer returnClass="java.util.HashMap" />
</enricher>
并查询变量而不是有效负载:
<logger message="#[flowVars.myJsonMap.People[0].Details.email]" level="INFO" />
您还可以映射json使用 Jackson 到自定义类并将 returnClass 属性更改为您的类。
此 MEL 备忘单详细介绍了 MEL 的 JSON 处理以及如何处理映射、数组等:http://www.mulesoft.org/documentation/display/current/MEL+Cheat+Sheet
Note:您可能会遇到 #[json:] 评估器,但它已被弃用,取而代之的是上述方法。
UPDATE:
如果您想一次获取所有电子邮件,您可以使用 MVEL 投影:
<enricher target="#[flowVars.myJsonMap]" source="#[(Details.email in payload.People)]">
<json:json-to-object-transformer returnClass="java.util.HashMap" />
</enricher>
Mvel 预测:http://mvel.codehaus.org/MVEL+2.0+Projections+and+Folds