我的数据是带有许多键的对象列表。要浏览数据,我只想查看一组受限的键。
input:
[
{
"field_1":123,
"field_2":123,
"field_3":123,
"field_4":123,
"field_5":123,
...and so on...
},
{
"field_1":123,
"field_2":123,
"field_3":123,
"field_4":123,
"field_5":123,
...and so on...
},
...many objects like this...
]
我想要这样的结果:
[
{
"field_1":123,
"field_2":123,
},
{
"field_1":123,
"field_2":123,
},
...all objects like this...
]
我知道我可以做到:
jq '.[] | {field_1:.field_1,field_2:.field_2}'
但是对于命令行上的数据探索它变得重复。是否有可用的快捷功能,例如:
jq '.[] | filter_keys("field_1","field_2")'
答案 0 :(得分:2)
有一个简写形式:
jq '.[] | {field_1,field_2}'
答案 1 :(得分:1)
根据您的情况,您可能只想包含对象中存在的字段,因此必须进行一些路径过滤。然后,您可以只传递要包括的字段列表。甚至进行基于模式的过滤。
$ jq --arg fields 'field_1,field_2' '
map(with_entries(select(. as {$key} | any($fields|split(",")[]; $key == .))))
' input.json
与任何过滤器一样,它们可以被制成函数并保存到~/.jq
文件中,以便通过以下方式在全球范围内使用:
def filter_keys($keys):
with_entries(select(. as {$key} | any($keys[]; $key == .)));
并使用它:
$ jq --arg fields 'field_1,field_2' 'map(filter_keys($fields|split(",")))'