我对 Jsonpath 还很陌生,由于项目依赖性而被迫使用。
示例 JSON 如下所示
{
"people": {
"a": {"First":"James", "last": "d"},
"b": {"First":"Jacob", "last": "e"},
"c": {"First":"Jayden", "last": "f"},
"d": {"First":"different", "last" : "g"}
}
}
我打算获取第一个值以“J”开头的最后一个值。
因此预期输出是
"d","e","f"
使用 jq 也可以实现同样的效果
'.people | .[] | select (.First | startswith("J")) | .last'
但是,在参考了多个在线教程之后,我还是无法理解管道过滤器如何与 jsonpath 配合使用以及如何实现上述结果。我能用表达式达到的最接近的结果是:
"people.*[?starts_with(arn,`J`)].last"
但它没有产生任何输出。
如果有人能指出任何可以帮助我解决这个问题或理解 jsonpath 的查询结构的文章,那就太好了。
多谢。
答案1
解决方案是使用函数值(@)。参考自
https://github.com/jmespath/jmespath.site/issues/24
因此,上述问题的一个可能的解决方案是
people.values(@)[?starts_with(First,`J`)].last