【问题标题】:How can I reference dynamic keys on an object in jq?如何在 jq 中引用对象上的动态键?
【发布时间】:2021-06-13 03:38:45
【问题描述】:

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

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

应该返回:

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

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

【问题讨论】:

    标签: json object key jq query-by-example


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多