首页 > 解决方案 > 使用 jq 获取键子集并将输出包装到列表

问题描述

假设我们有以下记录:

[
{"k1": "v1", "k2": "v2"},
{"k1": "v1", "k2": "v2"},
{"k1": "v1", "k2": "v2"}
]

我们只想保留键的一个子集,例如k1

我们要做什么操作才能得到下面的输出?

[
{"k1": "v1"},
{"k1": "v1"},
{"k1": "v1"}
]

我试过做jq '.[] | { "k1": .k1 }',但它返回

{"k1": "v1"}
{"k1": "v1"}
{"k1": "v1"}

也尝试过,jq '.[] | { "k1": .k1 }' | jq '[inputs]'但由于某种原因它删除了第一行

[
{"k1": "v1"},
{"k1": "v1"}
]

标签: jsonjq

解决方案


使用map,它将过滤器应用于数组的所有元素。

$ jq 'map({k1})' file
[
  {
    "k1": "v1"
  },
  {
    "k1": "v1"
  },
  {
    "k1": "v1"
  }
]

推荐阅读