我在使用基于字符串条件的 Jmespath 解析 json 时遇到问题。我想根据另一个键的字符串值的条件获取一个键的值。它们都位于给定字典的同一层次结构中。然而,字典的父键是一个变量。我熟悉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提供的文章。然而,他们中的大多数都集中在标准 key 结构上,而很少关注可变 key 字典结构。因此我无法为给定的 json 编写 jmespath 查询。
用于实现预期结果的 jq 等效项如下:-
.people | .[] | select (.First | startswith("J")) | .last
根据我的理解,我可以逻辑地得出的最接近的 jmespath 查询是:-
people.*[?starts_with(First,`J`)].last
但是,上述查询返回空白结果。
预期输出为
"d","e","f"
我无法理解我哪里出了问题。 如果有人能给我指出一篇好文章或帮助我找到上述问题的解决方案,那就太好了。
非常感谢
最佳答案
更新:
解决方案是使用values(@)。
引用链接 https://github.com/jmespath/jmespath.site/issues/24
因此,上述问题的可能解决方案之一是
people.values(@)[?starts_with(First,`J`)].last
因此,对于任何变量 key ,我们可以使用 value(@) 来过滤结构中进一步向下的投影。
关于使用字符串条件和 JMESPATH 进行 JSON 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57481891/