Traitement de données JSON
Bonjour,
je récupère des datas JSON (devices et sessions) via 2 commandes curl dans un script bash :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ curl https://serveur/api/devices | jq
[
{
"device_name": "AAAA",
"host": "172.20.1.1"
},
{
"device_name": "BBBB",
"host": "172.20.1.2"
},
{
"device_name": "CCCC",
"host": "172.20.1.3"
}
] |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| $ curl https://serveur/api/sessions| jq
[
{
"group_name": "GROUP_A",
"session": {
"accounts": [
{
"device": "AAAA",
"service": "SSH"
},
{
"device": "CCCC",
"service": "RDP"
}
],
"scenario_accounts": [],
"account_mappings": [
{
"device": "BBBB",
"service": "RDP"
},
{
"device": "CCCC",
"service": "RDP"
}
],
"interactive_logins": [
{
"device": "BBBB",
"service": "SSH"
}
]
}
},
{
"group_name": "GROUP_B",
"session": {
"accounts": [],
"scenario_accounts": [],
"account_mappings": [
{
"device": "AAAA",
"service": "RDP"
}
],
"interactive_logins": []
}
}
] |
Mon but est de comptabiliser les sessions par device et d'obtenir ce tableau :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [
"AAAA" : [
"host": "172.20.1.1",
"accounts": 1,
"scenario_accounts": 0,
"account_mappings": 1,
"interactive_logins": 0
],
"BBBB" : [
"host": "172.20.1.2",
"accounts": 1,
"scenario_accounts": 0,
"account_mappings": 0,
"interactive_logins": 1
],
"CCCC" : [
"host": "172.20.1.3",
"accounts": 1,
"scenario_accounts": 0,
"account_mappings": 1,
"interactive_logins": 0
]
] |
Première étape : construction du tableau final
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| devices=$(curl https://serveur/api/devices | jq)
readarray -t aDevices <<< $devices
declare -A allDevices=()
for device in "${aDevices[@]}"; do
declare -A aDevice
name=$(jq '.device_name' <<< "$device")
host=$(jq '.host' <<< "$device")
aDevice[host]=$host
aDevice[accounts]=0
aDevice[scenario_accounts]=0
aDevice[account_mappings]=0
aDevice[interactive_logins]=0
allDevices[$name]=aDevice
done |
Est-ce que c'est une bonne méthode pour commencer ?
Je dis ça... parce que je ne vois pas comment faire la suite :aie::roll:
parcourir le tableau de sessions est trop complexe pour moi... Y aurait-il une star du JSON+JQ+ARRAY ici ? un p'tit coup de pouce svp.
merci d'avance