Voici comment j'aborderais cela. C'est un peu plus verbeux que l'approche de peak.
Définissez d'abord quelques tableaux avec les données. Notez que j'ai pris la liberté d'ajouter une autre entrée pour tester ce qui se passe quand il n'y a pas de correspondance DegreesIndex ou SchoolIndex pour le donné Fan. J'aime utiliser les fonctions ici parce que vous pouvez facilement les remplacer par la logique dont vous avez besoin pour obtenir vos données réelles.
def array1: {
"Fan": [
{
"Last Name":"Mueller", "First Name":"Martin",
"Address": "Madisson Square", "City": "New York",
"DegreesIndex": 3, "SchoolIndex": 1
},
{
"Last Name":"Roberts", "First Name":"Bob",
"DegreesIndex": 2, "SchoolIndex": 4
},
{
"Last Name":"Skywalker", "First Name":"Luke",
"DegreesIndex": 5, "SchoolIndex": 1
}
]};
def array2: {
"Degrees": [
{ "DegreesIndex":3, "Key": "12759303", "Degrees":1.6 },
{ "DegreesIndex":2, "Key": "2", "Degrees":2 }
]};
def array3: {
"School": [
{ "SchoolIndex":1, "Teaser":"12759303.8", "Trainer":"Miller" },
{ "SchoolIndex":2, "Teaser":"2", "Trainer":"Miller" }
]};
Maintenant, définissez quelques fonctions de recherche simples qui retourneront l'enregistrement correspondant à la clé spécifiée. Notez l'utilisation de la construction [...] [0] pour renvoyer une valeur nulle si l'élément n'est pas trouvé au lieu de provoquer entièrement le Fan.
def LookupDegrees($i):
[
array2
| .Degrees[]
| select(.DegreesIndex == $i)
][0]
;
def LookupSchool($i):
[
array3
| .School[]
| select(.SchoolIndex == $i)
][0]
;
Tout ce qui rend simple routine principale:
array1
| .Fan[]
| .Degrees = LookupDegrees(.DegreesIndex)
| .School = LookupSchool(.SchoolIndex)
Voici le résultat que je reçois quand je lance avec JQ -n -f file.jq
{
"Last Name": "Mueller",
"First Name": "Martin",
"Address": "Madisson Square",
"City": "New York",
"DegreesIndex": 3,
"SchoolIndex": 1,
"Degrees": {
"DegreesIndex": 3,
"Key": "12759303",
"Degrees": 1.6
},
"School": {
"SchoolIndex": 1,
"Teaser": "12759303.8",
"Trainer": "Miller"
}
}
{
"Last Name": "Roberts",
"First Name": "Bob",
"DegreesIndex": 2,
"SchoolIndex": 4,
"Degrees": {
"DegreesIndex": 2,
"Key": "2",
"Degrees": 2
},
"School": null
}
{
"Last Name": "Skywalker",
"First Name": "Luke",
"DegreesIndex": 5,
"SchoolIndex": 1,
"Degrees": null,
"School": {
"SchoolIndex": 1,
"Teaser": "12759303.8",
"Trainer": "Miller"
}
}
Cela devrait Soyez facile à ajuster si vous avez besoin d'une imbrication ou d'une sortie différente.
1. Veuillez corriger le JSON. 2. S'il vous plaît clarifier la question après avoir examiné les lignes directrices à http://stackoverflow.com/help/mcve – peak