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(@) 来进一步过滤结构中的投影。
我在根据字符串条件使用 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(@) 来进一步过滤结构中的投影。