Cet article se consacre sur la suppression des doublons dans une liste JSON à l’aide de l’outil JQ.
Contexte
Une structure présente des doublons dont le discriminant est une clé (ou plutôt la valeur de cette clé).
Exemple
La récupération des messages d’une queue AWS SQS reçoit jusqu’à 10 messages aléatoires de la queue. EN itérant plusieurs fois, on récupère l’ensemble des éléments dont certains en double.
Les messages sont identifiables par la clé MessageID
, peu importe le body associé (qui nous est le même).
{ "Messages": [ { "MessageId": "730db08a-d598-4dba-81bb-32276571fa7b", "Body": "Body of 730db08a-d598-4dba-81bb-32276571fa7b" }, { "MessageId": "0f9ac919-eca5-405d-b37e-e65a7014d63d", "Body": "Body of 0f9ac919-eca5-405d-b37e-e65a7014d63d" }, { "MessageId": "730db08a-d598-4dba-81bb-32276571fa7b", "Body": "Body of 730db08a-d598-4dba-81bb-32276571fa7b" } ] }
L’entrée "MessageId": "730db08a-d598-4dba-81bb-32276571fa7b"
en double dans notre structure.
cat data.json | jq '.Messages |= unique_by(.MessageId)'
Résultat :
{ "Messages": [ { "MessageId": "730db08a-d598-4dba-81bb-32276571fa7b", "Body": "Body of 730db08a-d598-4dba-81bb-32276571fa7b" }, { "MessageId": "0f9ac919-eca5-405d-b37e-e65a7014d63d", "Body": "Body of 0f9ac919-eca5-405d-b37e-e65a7014d63d" }, ] }
Il ne reste plus qu’à exporter le résultat dans un fichier : data.uniq.json
.
cat data.json | jq '.Messages |= unique_by(.MessageId)' > data.uniq.json
Pratique et efficace 😉
Bibliographie
- Documentation officielle de JQ : https://jqlang.github.io/jq/
- GitHub jqlang/jq : https://github.com/jqlang/jq