我们说我有一个简单的json文件,如下面的
{
"log": {
"host": "blah",
"severity": "INFO",
"system": "1"
}
}
我使用Apache Camel,它的Spring XML来处理和路由json文件。我的路由代码如下所示:
<route>
<from uri="file:/TESTFOLDER/input"/>
<choice>
<when>
<jsonpath>$.log?(@.severity == 'WARNING')</jsonpath>
<to uri="smtp://(smtpinfo...not important)"/>
</when>
<otherwise>
<to uri="file:/TESTFOLDER/output"/>
</otherwise>
</choice>
</route>
我真正感到困惑的部分是JSONPath表达式。我上面的表达式甚至在语法上都不正确,因为很难找到你没有尝试对元素列表进行排序的例子。我的目标是,如果日志的严重性为“警告”,则只发送电子邮件。但是我无法想出这个表达。
答案 0 :(得分:5)
这对我使用Camel 2.13.1(我检查了INFO
,因为你的JSON示例有severity
;你可以根据你的需要改变它):
<jsonpath>$..log[?(@.severity == 'INFO')]</jsonpath>
请注意..
和[]
。但是,在搜索路径开头使用单个点.
失败:
<jsonpath>$.log[?(@.severity == 'INFO')]</jsonpath>
错误消息说:
java.lang.IllegalArgumentException: Invalid container object
这可能是一个错误。
根据JSON路径doc,..
代表“递归下降”。这可能不符合您的要求。但是,由于单个点.
不起作用,这是我想到的唯一可行的工作。否则,你可能会增加一张错误罚单。