1

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

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

应该返回:

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

我知道我可以.[some_string]用来动态获取对象上特定字符串键的值,但我不知道如何将其用于多个字符串键。我认为我遇到的问题是 jq 默认情况下迭代流入过滤器的对象,但没有提供迭代该过滤器参数的方法,即使我使用def myFilter($var)手册推荐的语法值-论证行为

4

1 回答 1

1

您可以轻松定义您的myFilterusing reduce

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

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

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

如果不能以这种缩写格式指定任何键,只需将它们用双引号引起来。

于 2021-03-15T21:08:40.973 回答