給定json,我需要按鍵對所有站點->建筑物->樓層userName的物件進行分組,并洗掉任何重復的 MAC 地址。userClientDetailDTOList
我已經能夠使用 jq 運算式來做到這一點 -
[.billingDetailPerSiteDTOList[].billingDetailPerBuildingDTOList[].billingDetailsPerFloorDTOList[].userClientDetailDTOList[] ] | group_by(.userName) | map((.[0]|del(.associatedMacs)) { associatedMacs: (map(.associatedMacs[]) | unique) })
這按特定用戶分組userName并洗掉macs屬于特定用戶的重復項。這導致串列為
[
{
"userName": "1",
"associatedMacs": [
"3:3:3:3:3:3",
"5:5:5:5:5:5"
]
},
{
"userName": "10",
"associatedMacs": [
"4:4:4:4:4:4",
"6:6:6:6:6:6"
]
},
{
"userName": "2",
"associatedMacs": [
"1:1:1:1:1:1",
"2:2:2:2:2:2"
]
},
{
"userName": "3",
"associatedMacs": [
"2:2:2:2:2:2"
]
}
]
活生生的例子
問題:
- 運算式可以簡化嗎?
- 如何洗掉所有用戶的重復 MAC 地址?用戶的mac地址
2:2:2:2:2:2是重復的2,3
uj5u.com熱心網友回復:
過濾器實際上盡可能好。如果你真的想,你仍然可以改變
del(.associatedMacs)為{userName}一個積極的定義,和(…) {…}為了{userName: …, associatedMacs: …}避免添加,
導致
… | map({userName: (.[0].userName), associatedMacs: (map(.associatedMacs[]) | unique)})
演示
至于第二個問題,如果您將輸入視為INDEXIP 上的一個,您可以主要重用之前的代碼(當然,unique不再需要該部分)
[INDEX(…; .associatedMacs[])[]] | group_by(.userName) | map(…)
[
{
"userName": "1",
"associatedMacs": [
"3:3:3:3:3:3",
"5:5:5:5:5:5"
]
},
{
"userName": "10",
"associatedMacs": [
"4:4:4:4:4:4",
"6:6:6:6:6:6"
]
},
{
"userName": "2",
"associatedMacs": [
"1:1:1:1:1:1"
]
},
{
"userName": "3",
"associatedMacs": [
"2:2:2:2:2:2"
]
}
]
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437359.html
