获取键的子集,并使用jq将输出包装到列表中

时间:2019-04-30 13:14:42

标签: json bash command-line 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"}
]

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

,或者,您可能已使用用于JSON的步行路径unix工具: jtc

bash $ <file.json jtc -w'<k1>l:' -pp
[
   {
      "k1": "v1"
   },
   {
      "k1": "v1"
   },
   {
      "k1": "v1"
   }
]
bash $ 

-递归遍历标签为k1的所有记录,并清除(-pp)其他所有记录

或者,仅遍历所有带有标签k1的元素,将遍历的元素包装到带有标签-j的数组(-l)中,而不合并它们({{1 }}):

-n

PS>披露:我是bash $ <file.json | jtc -w'<k1>l:' -jln [ { "k1": "v1" }, { "k1": "v1" }, { "k1": "v1" } ] bash $ 工具的创建者