JSON 正在使用带有 JMESPATH 的字符串条件进行解析

JSON parsing using String Condition with JMESPATH

我在根据字符串条件使用 Jmespath 解析 json 时遇到问题。我想根据另一个键的字符串值的条件获取一个键的值。它们都在给定字典的同一层次结构中。但是,字典的父键是 variable.I 我熟悉 jq 但 jmespath 对我来说是新的。我正在使用它,因为当前项目依赖于它。因此在更改解析器方面没有太多选择。

示例 Json 下面:-

{
  "people": {
    "a": {"First":"James", "last": "1"},
    "b": {"First":"Jacob", "last": "2"},
    "c": {"First":"Jayden", "last": "3"},
    "d": {"First":"different", "last" : "4"}
  }
}

我想获得最后一个值,其中第一个值以 "J" 开头。

我试过参考 http://jmespath.org/tutorial.html 官方网站上提供的文章。然而,他们中的大多数都集中在标准的键结构上,而不是在可变键字典结构上。因此我无法为给定的 json.

编写 jmespath 查询

下面给出了实现预期结果的等效 jq :-

.people | .[] | select (.First | startswith("J")) | .last

根据我的理解,我可以在逻辑上得出的最接近的 jmespath 查询是:-

people.*[?starts_with(First,`J`)].last

但是,上面的查询returns结果为空。

预期输出为

 "d","e","f"

我不明白我哪里出错了。 如果有人能给我指出一篇好文章或帮助我找到上述问题的解决方案,那就太好了。

非常感谢

更新:

解决方法是使用values(@).

引用link https://github.com/jmespath/jmespath.site/issues/24

所以上述问题的可能解决方案之一是

people.values(@)[?starts_with(First,`J`)].last

因此对于任何变量 key ,我们可以使用 values(@) 来进一步过滤结构中的投影。