【发布时间】:2020-08-31 21:41:22
【问题描述】:
我正在尝试在 jq 中选择对象子集的子集,同时保留外部对象。
以输入为例:
{
"head": "master",
"hash": "ba2054c38ec68b73926acb24cd0bad61177a03d4",
"upstream": "origin/master",
"ahead": 1,
"behind": 0,
"changes": [
{
"name": "exe/each-package",
"status": "updated_in_index",
"work_tree_status": "modified",
"index_status": "unmodified"
},
{
"name": "exe/find-package",
"status": "not_updated",
"work_tree_status": "unmodified",
"index_status": "modified"
},
{
"name": "lib/tools/tool_support.rb",
"status": "not_updated",
"work_tree_status": "unmodified",
"index_status": "modified"
},
{
"name": "curses.txt",
"status": "untracked",
"work_tree_status": "untracked",
"index_status": "untracked"
},
{
"name": "exe/fat-stat",
"status": "untracked",
"work_tree_status": "untracked",
"index_status": "untracked"
},
{
"name": "exe/prefix-each-with",
"status": "untracked",
"work_tree_status": "untracked",
"index_status": "untracked"
},
{
"name": "notes.txt",
"status": "untracked",
"work_tree_status": "untracked",
"index_status": "untracked"
}
]
}
以及我删除了changes 成员子集的预期输出:
{
"head": "master",
"hash": "ba2054c38ec68b73926acb24cd0bad61177a03d4",
"upstream": "origin/master",
"ahead": 1,
"behind": 0,
"changes": [
{
"name": "exe/each-package",
"status": "updated_in_index",
"work_tree_status": "modified",
"index_status": "unmodified"
},
{
"name": "exe/find-package",
"status": "not_updated",
"work_tree_status": "unmodified",
"index_status": "modified"
},
{
"name": "lib/tools/tool_support.rb",
"status": "not_updated",
"work_tree_status": "unmodified",
"index_status": "modified"
}
]
}
我能够做到以下几点。但我怀疑有一种更简洁的方法来过滤嵌套数组的内部结构,也许可以消除重复。
jq '. + {changes: [.changes[] | select(.status != "untracked")]}'
【问题讨论】: