如何使用JMESPath从指定键列表中提取对应值?
如何使用JMESPath从指定键列表中提取对应值?
嘿,我来帮你搞定这个JMESPath的小问题!
你现在的需求是从给定对象{"a": "foo", "b": "bar", "c": "baz"}里,根据键列表["b", "c"]提取出对应的["bar", "baz"]对吧?你之前试的map(*.@, ["b", "c"])没起作用,是因为JMESPath里map的语法和你写的不太对,其实有更简单的写法哦!
方法一:直接使用键列表索引
JMESPath支持直接用数组形式的键列表来提取对象的值,表达式非常简洁:
@["b", "c"]
把这个表达式作用在你的目标对象上,就能直接得到["bar", "baz"]。这里的@代表当前的对象上下文,["b", "c"]就是你要提取的键列表,这种写法是最直接高效的。
方法二:使用map函数(如果你更习惯函数式写法)
如果想用map来实现,你需要调整表达式的写法,让map遍历键列表时,从根对象里取出对应键的值:
map(&$[@], ["b", "c"])
这里的&用来创建一个表达式引用,$代表根对象,[@]则是取当前遍历到的键对应的值,这样也能得到你想要的结果。
你之前的写法map(*.@, ["b", "c"])不对,是因为*.@这个表达式在map里没有正确关联到目标对象,没法从对象里获取对应键的值,调整成上面的写法就可以啦!
备注:内容来源于stack exchange,提问作者Ziyuan
相关产品推荐
相关产品推荐

