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

用于检查Apache Camel XML中字符串的JSONPath表达式,json,apache-camel,activemq,jsonpath,Json,Apache Camel,Activemq,Jsonpath,假设我有一个简单的json文件,如下所示 { "log": { "host": "blah", "severity": "INFO", "system": "1" } } 我使用ApacheCamel,它是SpringXML来处理和路由json文件。我的路由代码如下所示: <route> <from uri="file:/TESTFOLDER/input"/> <choice>

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

{
    "log": {
        "host": "blah",
        "severity": "INFO",
        "system": "1"
    }
}
我使用ApacheCamel,它是SpringXML来处理和路由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>

$.log?(@.severity=='警告')

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

这对我使用Camel 2.13.1是有效的(我检查了
信息,因为JSON示例具有此
严重性
;您可以根据需要更改此设置):

错误消息显示:

java.lang.IllegalArgumentException: Invalid container object
这可能是一个错误


根据JSON路径,
代表“递归下降”。这可能不符合您的要求。然而,由于单点
不起作用,这是我发现的唯一可行的解决办法。否则,您可能会引起错误。

这似乎有效,但奇怪的是,单点不起作用,因为文档中的示例似乎在类似情况下使用它。
<jsonpath>$.log[?(@.severity == 'INFO')]</jsonpath>
java.lang.IllegalArgumentException: Invalid container object