JsonPath:通过字段在数组中查找元素

huangapple go评论71阅读模式
英文:

JsonPath: find an element in an array by field

问题

我有一个匿名对象数组,我想通过特定字段找到一个对象。

我尝试了这个:

jsonPath.get("$.[?(@.name == 'David')]")

但是我得到了以下错误:

无效的JSON表达式:
Script1.groovy: 1: 预期外的输入: '                         $.[\' @ line 1, column 29.
                            $.[?(@.name == 'David')]
                               ^

1 错误

我该如何修复这个问题?

JSON 数据如下:

[
 {"name": "David"}, {"name": "Ron"}, {"name": "Dana"}
]
英文:

I have an anonymous array of objects and I'd like to find an object by a specific field.

I tried this:

jsonPath.get("$.[?(@.name == 'David')]")

but I'm getting the following error:

Invalid JSON expression:
Script1.groovy: 1: Unexpected input: '                         $.[' @ line 1, column 29.
                            $.[?(@.name == 'David')]
                               ^

1 error

How do I fix that?

The json is:

[
 {"name": "David"}, {"name": "Ron"}, {"name": "Dana"}
]

答案1

得分: 3

问题有点不明确,但语法是错误的,Json path 语法使用 GroovyGPath 表示法

js.getString("find {it.name == 'David'}")
英文:

The question is a bit ambiguous, But the syntax is incorrect, Json path syntax uses Groovy's GPath notation

js.getString("find {it.name == 'David'}")

答案2

得分: 0

你可能需要

$.[?(@.name == 'David')]

=>  $.data[?(@.name == 'David')]
    $.response[?(@.name == 'David')]
    $.body[?(@.name == 'David')]
    ...

名称取决于您提取响应的时间。

英文:

You may need

$.[?(@.name == 'David')]

=>  $.data[?(@.name == 'David')]
    $.response[?(@.name == 'David')]
    $.body[?(@.name == 'David')]
    ...

The name depends on when you extract your response

答案3

得分: 0

因为您正在使用 JSON 数组,
所以请使用 - $[0],
因为 David 在第一个索引上。

英文:

Because You are using json Array ,
do use - $[0] ,
since david is on first index.

huangapple
  • 本文由 发表于 2020年9月14日 22:47:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/63886670.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定