2017-09-25 60 views
1

我試圖通過id 這裏請從以下JSON的重複刪除重複是JSON:JQ - 使用unique_by

{ 
    "Result": [ 
    { 
     "name": "validation-of-art", 
     "id": "12", 
     "status": "passed", 
     "duration": 4740302 
    }, 
    { 
     "name": "validation-of-art", 
     "id": "12", 
     "status": "passed", 
     "duration": 272320 
    }, 
    { 
     "name": "validation-of-art", 
     "id": "13", 
     "status": "passed", 
     "duration": 272320 
    } 
    ] 
} 

這裏是我有嘗試:

jq -r 'unique_by(.Result.name)' 

並且還與jq 'unique_by(.Result[].name)'

我得到一個錯誤 - Cannot index array with string "Result" 任何幫助將會是有益的特德。

回答

2

下面是使用unique_by(.name)

$ jq -M '.Result |= unique_by(.name)' data.json 
{ 
    "Result": [ 
    { 
     "name": "validation-of-art", 
     "id": "12", 
     "status": "passed", 
     "duration": 4740302 
    } 
    ] 
} 

如果這不是你想要的,你可以很容易地概括這個相當有什麼消除所有,但.Result對象的一個​​例子。例如。爲每個獨特的物品保留一個物品{name,id}您可以使用

$ jq -M '.Result |= unique_by({name, id})' data.json 
{ 
    "Result": [ 
    { 
     "name": "validation-of-art", 
     "id": "12", 
     "status": "passed", 
     "duration": 4740302 
    }, 
    { 
     "name": "validation-of-art", 
     "id": "13", 
     "status": "passed", 
     "duration": 272320 
    } 
    ] 
}