5

假设我有一个简单的 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 表达式。我上面的表达式甚至在语法上都不正确,因为在您不尝试对元素列表进行排序的情况下,很难找到示例。我的目标是仅在日志的严重性为“警告”但我无法提出表达式时才发送电子邮件。

4

1 回答 1

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 Path doc..代表“递归下降”。这可能不符合您的要求。但是,由于单个点.不起作用,这是我想出的唯一可能的解决方法。否则,您可能会收到一张错误票。

于 2014-05-23T08:01:01.403 回答