- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Jayway JsonPath 库版本 2.4.0。在 jsonPath 中使用 indexOf 函数,例如。 $.values[?(@.num.indexOf('101') != -1)].id
它给出异常函数参数:'indexOf'未正确关闭。
但在线 jsonPath 评估器上的效果相同
我在 https://jsonpath.com 上尝试了相同的 jsonPath 和 json 字符串。那里工作得很好。我尝试过一些混合和匹配(例如 $.values[?(@.num.indexOf("101") != -1)].id
) (双引号而不是单引号)但还是一样。
public static void main(String[] args) {
try {
String jsonString ="{ \n" +
" \"values\":[ \n" +
" { \n" +
" \"num\":[\"101\", \"102\"],\n" +
" \"id\": \"a\"\n" +
" },\n" +
" { \n" +
" \"num\":[\"104\", \"105\"],\n" +
" \"id\": \"b\"\n" +
" }\n" +
" ]\n" +
"}";
String jsonPath = "$.values[?(@.num.indexOf('101') != -1)].id";
DocumentContext jsonContext = JsonPath.parse(jsonString);
List<String> ans = null;
ans = jsonContext.read(String.valueOf(jsonPath));
System.out.println(ans);
}catch(Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
预期答案是“a”
但它给出了异常(exception)。这是堆栈跟踪
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
com.jayway.jsonpath.InvalidPathException: Arguments to function: 'indexOf' are not closed properly.
at com.jayway.jsonpath.internal.path.PathCompiler.parseFunctionParameters(PathCompiler.java:375)
at com.jayway.jsonpath.internal.path.PathCompiler.readPropertyOrFunctionToken(PathCompiler.java:217)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:151)
at com.jayway.jsonpath.internal.path.PathCompiler.readDotToken(PathCompiler.java:171)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:145)
at com.jayway.jsonpath.internal.path.PathCompiler.readPropertyOrFunctionToken(PathCompiler.java:237)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:151)
at com.jayway.jsonpath.internal.path.PathCompiler.readDotToken(PathCompiler.java:171)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:145)
at com.jayway.jsonpath.internal.path.PathCompiler.readContextToken(PathCompiler.java:124)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:58)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:75)
at com.jayway.jsonpath.internal.filter.ValueNodes$PathNode.<init>(ValueNodes.java:580)
at com.jayway.jsonpath.internal.filter.ValueNode.createPathNode(ValueNode.java:208)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readPath(FilterCompiler.java:364)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readValueNode(FilterCompiler.java:96)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readExpression(FilterCompiler.java:190)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalANDOperand(FilterCompiler.java:186)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalAND(FilterCompiler.java:150)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalOR(FilterCompiler.java:132)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalANDOperand(FilterCompiler.java:181)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalAND(FilterCompiler.java:150)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalOR(FilterCompiler.java:132)
at com.jayway.jsonpath.internal.filter.FilterCompiler.compile(FilterCompiler.java:78)
at com.jayway.jsonpath.internal.filter.FilterCompiler.compile(FilterCompiler.java:54)
at com.jayway.jsonpath.internal.path.PathCompiler.readFilterToken(PathCompiler.java:461)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:141)
at com.jayway.jsonpath.internal.path.PathCompiler.readPropertyOrFunctionToken(PathCompiler.java:237)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:151)
at com.jayway.jsonpath.internal.path.PathCompiler.readDotToken(PathCompiler.java:171)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:145)
at com.jayway.jsonpath.internal.path.PathCompiler.readContextToken(PathCompiler.java:124)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:58)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:75)
at com.jayway.jsonpath.JsonPath.<init>(JsonPath.java:97)
at com.jayway.jsonpath.JsonPath.compile(JsonPath.java:463)
at com.jayway.jsonpath.internal.JsonContext.pathFromCache(JsonContext.java:222)
at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:78)
at Init.main(Init.java:32)
Arguments to function: 'indexOf' are not closed properly.
最佳答案
JsonPath 有多种实现。您的路径表达式与 Jayway 实现不兼容。我认为这是该实现中的一个错误。
所以你可以切换库,或者你可以将你的表达式更改为 Jayway 版本可以接受的内容。如果您更改此路径,您的代码应该会给出您期望的结果:
String jsonPath = "$.values[?('101' in @.num)].id";
关于Java JsonPath函数 "indexOf"给出异常: Arguments to function: 'indexOf' are not closed properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767604/
例如,如果我的程序名称是 test.c 然后对于以下运行命令,argc = 2 而不是 4。 $test abc pqr* *xyz* 最佳答案 尝试运行: $ echo abc pqr* *xyz*
我正在尝试使用一个容器来显示TextField,但是该容器不喜欢我的操作顺序。这是我的代码: Widget build(BuildContext context) { return Scaffol
我有以下代码: class MetricGoogleGateway extends AMetricGateway{ constructor(id, name, token) {
我像这样调用下面的对象方法。 new Cout( elem1 ).load( 'body' ) new COut( elem1 ).display( 'email' ) 我一次只使用一个实例。因为我一
我正在尝试使用 C++11 中的可变参数函数模板,并通过如下代码了解了基本思想: void helper() { std::cout void helper( T&& arg ) {
在学习 ExtJS 4 时,我发现在定义一个新类时,在 initComponent 中方法可以使用 this.callParent(arguments) 调用父类的构造函数. 我想知道这个 argum
使用 XCode 9,Beta 3。Swift 4。 statsView.createButton("Button name") { [weak self] Void in //stuff st
以下代码将打印1: (function (arguments) { console.log(arguments); }(1, 2)); 实际上,arguments 对象已被覆盖。是否可以恢复函
/** * @param $name * @return Response * @Route ("/afficheN/{name}",name="afficheN") */ public fu
我习惯使用Scala scopt用于命令行选项解析。您可以选择参数是否为 .required()通过调用刚刚显示的函数。 如何定义仅在定义了另一个参数时才需要的参数? 例如,我有一个标志 --writ
所以这是我的代码: def is_valid_move(board, column): '''Returns True if and only if there is an o
我试图在这里运行此代码: threads = [threading.Thread(name='ThreadNumber{}'.format(n),target=SB, args(shoe_type,m
在静态类型函数编程语言(例如 Standard ML、F#、OCaml 和 Haskell)中,编写函数时通常将参数彼此分开,并通过空格与函数名称分开: let add a b = a + b
function validateArguments(args) { if(args.length 2) { throw new RangeError("Invalid amo
我正在使用 Django 1.5 并尝试将参数传递到我的 URL。当我使用前两个参数时,下面的代码工作正常,使用第三个参数时我收到错误。我已经引用了新的 Django 1.5 更新中的 url 用法,
我刚刚开始使用 ember js 并且多次被这个功能绊倒 有人可以简要介绍一下 this._super() 的使用,并解释 ...arguments 的重要性 谢谢 最佳答案 每当您覆盖类/函数(例如
这个问题在这里已经有了答案: How to fix an "Argument passed to call that takes no arguments" error? (2 个答案) 关闭 3
我正在创建一个简单的登录注册应用程序。但是我遇到了错误,我不知道如何解决,请帮忙!这是我的代码: // // ViewController.swift // CHLogbook-Applicati
我是 Swift 的初学者。我尝试创建一个表示 Meal 的简单类。 它有一些属性和一个返回可选的构造函数 但是当我尝试测试它或在任何地方实例化它时,我得到的只是一个错误。似乎无法弄清楚发生了什么。
我有一个在特殊环境下运行其他程序的系统程序: cset shield -e PROGRAM .现在要运行一个 java 程序,我输入了 cset shield -e java PROGRAM ,但这不
我是一名优秀的程序员,十分优秀!