用于检查Apache Camel XML中的字符串的JSONPath表达式

And*_*w G 4 json activemq-classic apache-camel jsonpath

假设我有一个简单的json文件,如下所示

{
    "log": {
        "host": "blah",
        "severity": "INFO",
        "system": "1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

我真正困惑的部分是JSONPath表达式.我上面的表达式甚至在语法上都不正确,因为很难找到你不试图对元素列表进行排序的例子.我的目标是只在日志的严重性为"警告"时发送电子邮件,但我无法提出表达式.

Pet*_*ler 5

这对我使用Camel 2.13.1(我检查INFO过你的JSON示例有这个severity;你可以根据你的需要改变它):

<jsonpath>$..log[?(@.severity == 'INFO')]</jsonpath>
Run Code Online (Sandbox Code Playgroud)

注意..[].但是,.在搜索路径开头使用单个点失败:

<jsonpath>$.log[?(@.severity == 'INFO')]</jsonpath>
Run Code Online (Sandbox Code Playgroud)

错误消息说:

java.lang.IllegalArgumentException: Invalid container object
Run Code Online (Sandbox Code Playgroud)

这可能是一个错误.

根据JSON Path doc,..代表"递归下降".这可能不符合您的要求.但是,由于单点.不起作用,这是我想到的唯一可行的工作.否则,您可能会提出错误罚单.