2017-09-25 4 views
1

Je suis en train de supprimer les doublons de la JSON suivante id Voici le JSON:JQ - la suppression des doublons en utilisant 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 
    } 
    ] 
} 

Voici ce que j'ai essayé avec:

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

et aussi avec jq 'unique_by(.Result[].name)'

Je reçois une erreur - Cannot index array with string "Result" Toute aide serait appréciée ted.

Répondre

2

Voici un exemple qui élimine tout sauf l'un des objets à l'aide .Resultunique_by(.name)

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

Si ce n'est pas tout à fait ce que vous voulez, vous pouvez généraliser facilement. Par exemple. pour garder un objet pour chaque unique {name,id} vous pouvez utiliser

$ 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 
    } 
    ] 
}