apache-camel - 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]
解决方案
您可以在 when 子句中直接使用 jsonPath,如骆驼文档中所述。您的代码如下所示:
from("direct:parseJson")
.choice()
.when().jsonpath("$..books.length() == '1'")
.log("One book")
.otherwise()
.log("multiple");
推荐阅读
- count - 如何计算lisp列表中出现的次数
- java - 如何从 Vector 中的对象获取浮点值?
- c++ - 使用单个输入 C++ 在数组中存储多个整数
- r - 如何从 R 类加载中提取百分比方差信息
- java - Java 是否有不需要添加显式 jar 引用的内部 JSON 库?
- javascript - Javascript 仅使用循环来显示数据数组(并非所有数据数组)
- google-apps-script - 如何仅在 Google Apps 脚本 replaceText() 完成后创建 PDF?
- java - 扩展最终类或替换它
- html - 如何使用 Angular 7 动态禁用输入
- c - 为任意长度的字符串动态分配内存