我在嘗試這樣做的時候真的很糾結,所以我很抱歉(jq不是我的強項)。
我有一個檔案,里面有一個像這樣的json陣列:
我有一個檔案,里面有一個像這樣的json陣列。
[
{
"name"/span>: "aaaa"/span>,
"description": "aaaa",
"屬性": [
{
"trait": "顏色1"。
"value": "藍色"。
},
{
"trait": "顏色2",
"value": "Yellow"。
},
{
"trait": "頭發",
"value": "Wild", "值": "Wild"
}
]
},
{
"name": "bbbbb",
"description": "bbbbb",
"屬性": [
{
"trait": "顏色1"。
"value": "藍色"。
},
{
"trait": "顏色2",
"value": "紅色"。
},
{
"trait": "Hair",
"value": "Wild", "值": "Wild"
}
]
}
我想輸出一個json物件,顯示每個特質的數量,所以最終結果將包括類似于
的東西{
"Color 1" 。{
"Blue":2。
},
"Color 2":{
"Yellow"/span>:1。
"Red":1.
},
"頭發":{
"野生":2
}
}
這可能不是太難,但就像我說的,我在jq方面很爛:)
uj5u.com熱心網友回復:
考慮到group by和bag-of-words的概念,定義如下:
def bow(stream):
減少流為$word ({}; ...[($word|tostring)] = 1)。 = 1);
不難看出,下面產生的結果緊隨其后:
。map(.attribute[])
| group_by(.trait)。
| map( { (. [0].trait): bow(. [].value) } )
[{"Color 1":{"Blue": 2}},{"Color 2":{"Yellow": 1,"Red": 1}},{"Hair":{"Wild":2}}]/span>
因此,為了得到你想要的結果,只需在管道中添加| add即可。
uj5u.com熱心網友回復:
const traits = input.reduce((aggr, obj) => aggr.concat(obj.attribute), [])。
const traitSet = traits.reduce((aggr, {>trait, value}) => {
if(!aggr[trait] ) {
aggr[trait] = {};
}
if(!aggr[trait][value])/span>{
aggr[trait][value] = 0;>
}
aggr[trait][value] = aggr[trait][value] 1。
return aggr;
}, {});
console.log(traitSet)。
//或 console.log(JSON.stringify(traitSet)) - 因為你要求的是JSON。
只是一個非常快速的版本和vanilla版本。這段代碼可以通過使用lodash等庫來實作鏈化或減少冗長的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/306936.html
標籤:
