假设我们有以下记录:
[
{"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"}
]
答案 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 $
工具的创建者