微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 jq 中引用对象上的动态键?

如何解决如何在 jq 中引用对象上的动态键?

我正在尝试定义一些自定义过滤器函数,我需要做的一件事是将字符串列表传递给过滤器并获取输入对象的相应值。例如:

jq -n '{name: "Chris",age: 25,city: "Chicago"} | myFilter(["name","age"])'

应该返回:

{"name": "Chris","age": 25}

我知道我可以使用 .[some_string] 为特定字符串键动态获取对象上的值,但我不知道如何将它用于多个字符串键。我认为我遇到的问题是 jq 认情况下迭代流到过滤器的 objects ,但没有提供迭代该过滤器的参数的方法,即使我使用 {手册为值参数行为推荐的{1}}语法。

解决方法

您可以使用 myFilter 轻松定义您的 reduce

def myFilter($keys):
  . as $in
  | reduce $keys[] as $k (null; . + {($k): $in[$k]} );

更有趣的是,如果您愿意稍微修改“Query By Example”要求,您可以简单地在大括号中指定感兴趣的键,如下例所示:

jq -n '{name: "Chris",age: 25,city: "Chicago"} | {name,age}'

如果无法以这种缩写格式指定任何键,只需将它们双引号即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。