首页 > 解决方案 > Jsonpath 数组长度验证问题

问题描述

我正在解析一个 json 并验证数组长度,如下所示

from("direct:parseJson")
        .setHeader("numberOfBooks").jsonpath("$..books.length()", int.class)
        .choice()
                .when( simple("${header.numberOfBooks} == '1'"))
                         .log("One book")
                 .otherwise()
                         .log("multiple");

上面的代码有效,但我正在寻找选项,如果我们可以避免下面的第 2 行

 .when( simple("${jsonpath(' $..books.length() ', int.class)} == 1") )

它的投掷错误

Caused by:
org.apache.camel.language.simple.types.SimpleIllegalSyntaxException:
Unknown function: jsonpath(' $..books.length() ', int.class) == 1 at
location 0
${jsonpath(' $..books.length() ', int.class)} == 1

第二次尝试我用常量设置标题以验证简单表达式是否有效

.when().jsonpath("$..books.length() > ${header.numberOfBooks}")

Caused by: com.jayway.jsonpath.InvalidPathException: Could not parse token starting at position 18
        at com.jayway.jsonpath.internal.path.PathCompiler.fail(PathCompiler.java:616) ~[json-path-2.4.0.jar:2.4.0]
        at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:152) ~[json-path-2.4.0.jar:2.4.0]

标签: apache-cameljsonpath

解决方案


您可以在 when 子句中直接使用 jsonPath,如骆驼文档中所述。您的代码如下所示:

from("direct:parseJson")
        .choice()
        .when().jsonpath("$..books.length() == '1'")
                 .log("One book")
             .otherwise()
                 .log("multiple");

推荐阅读