(Il était difficile de trouver un titre qui résume le problème, alors n'hésitez pas à l'améliorer).Utilisation de jq pour analyser les clés présentes dans deux listes (même si elles n'existent peut-être pas dans l'une d'elles)
Je dispose d'un fichier JSON avec le contenu suivant:
{
"Items": [
{
"ID": {
"S": "ID_Complete"
},
"oldProperties": {
"L": [
{
"S": "[property_A : value_A_old]"
},
{
"S": "[property_B : value_B_old]"
}
]
},
"newProperties": {
"L": [
{
"S": "[property_A : value_A_new]"
},
{
"S": "[property_B : value_B_new]"
}
]
}
},
{
"ID": {
"S": "ID_Incomplete"
},
"oldProperties": {
"L": [
{
"S": "[property_B : value_B_old]"
}
]
},
"newProperties": {
"L": [
{
"S": "[property_A : value_A_new]"
},
{
"S": "[property_B : value_B_new]"
}
]
}
}
]
}
Je voudrais manipuler les données à l'aide jq
de telle sorte que pour chaque élément de Items[]
qui a une nouvelle valeur pour property_A (sous newProperties liste) générer une sortie avec l'ID correspondant , vieux et nouveaux (voir ci-dessous la sortie désirée) des champs, quelle que soit la valeur que la propriété a dans les oldProperties liste. De plus, si property_A n'existe pas dans les oldProperties, je dois encore le vieux champ être peuplé avec une null
(ou une chaîne fixe pour ce qu'il vaut la peine).
sortie souhaitée:
{
"id": "id_Complete",
"old": "[property_A : value_A_old]",
"new": "[property_A : value_A_new]"
}
{
"id": "ID_Incomplete",
"old": null,
"new": "[property_A : value_A_new]"
}
Note: Même si property_A n'existe pas dans les oldProperties liste, d'autres propriétés peuvent (et) existe.
Le problème que je suis face est que je ne suis pas en mesure d'obtenir une sortie lorsque la propriété désirée n'existe pas dans les oldProperties liste. Ma commande actuelle jq
ressemble à ceci:
jq -r '.Items[] |
{ id:.ID.S,
old:.oldProperties.L[].S | select(. | contains("property_A")),
new:.newProperties.L[].S | select(. | contains("property_A")) }'
Ce qui ne fait que rendre la ID_Complete cas, alors que je dois l'autre aussi bien.
Y a-t-il un moyen d'y parvenir en utilisant cet outil?
Merci d'avance.
Réponse impressionnante, merci. Tant ceci que l'autre travail. Avant d'en accepter une cependant, je vais les essayer dans le système qui est déjà en place et voir lequel des deux peut être mieux adapté à cela (puisque la question présentait un exemple de travail et réduit d'une petite partie des données). – Nacho