尝试从嵌套的 JSON 数组中获取唯一条目。
JSON 来源
[
{"SIR":[{"PMD":[{"MMA":[{"DN":"One","SA":"1"},{"DN":"Two","SA":"2"}]}]}]},
{"SIR":[{"PMD":[{"MMA":[{"DN":"Two","SA":"2"},{"DN":"Four","SA":"4"}]}]}]},
{"SIR":[{"PMD":[{"MMA":[{"DN":"Three","SA":"3"},{"DN":"Five","SA":"5"}]}]}]}
]
过滤器产生非唯一结果:
'.[].SIR.PMD.MMA
| [.DN, .SA]
| @csv'
电流输出(CSV
One,1
Two,2
Two,2
Three,3
Four,4
Five,5
期望的输出(CSV)
One,1
Two,2
Three,3
Four,4
Five,5
将要过滤的项目收集到一个数组中,然后单独使用 unique
来比较整个对象,或者使用 unique_by
在任何过滤器组合上,例如.DN
):
jq -r 'map(.SIR[].PMD[].MMA[]) | unique[] | [.DN, .SA] | @csv'
jq -r 'map(.SIR[].PMD[].MMA[]) | unique_by(.DN)[] | [.DN, .SA] | @csv'
请注意,输出将被排序,在第一种情况下按整个对象排序,在后者中按提供的过滤器排序。要实现样本输出的排序,请在 unique_by
上使用 .SA
,或者先使用 .SA
,然后使用 .DN
:
jq -r 'map(.SIR[].PMD[].MMA[]) | unique_by(.SA)[] | [.DN, .SA] | @csv'
jq -r 'map(.SIR[].PMD[].MMA[]) | unique_by([.SA, .DN])[] | [.DN, .SA] | @csv'
"One","1"
"Two","2"
"Three","3"
"Four","4"
"Five","5"