Introduzione
JSON è un formato di rappresentazione dei dati utilizzato per archiviare e trasferire dati tra diversi livelli di un'applicazione; memorizza i dati in chiave: coppie di valori.
La sintassi di JSON è stata derivata da JavaScript ma è essa stessa indipendente dal linguaggio. È compatibile con molti linguaggi di programmazione; questi linguaggi includono codice che può essere utilizzato per integrare JSON nel programma; ma sfortunatamente, non possiamo lavorare con JSON direttamente nella shell di Linux in quanto non può interpretarlo. Per lavorare con JSON nella shell Linux utilizziamo una combinazione di strumenti come JQ e sed.
In questo post impareremo a utilizzare il comando JQ per manipolare e lavorare con i dati JSON in una shell Linux.
Come installare il comando JQ
Il comando JQ non è disponibile in alcune distribuzioni Linux per impostazione predefinita; Deve essere scaricato nel sistema prima di poter essere utilizzato sul terminale; Puoi scaricare il comando JQ proprio come qualsiasi altro pacchetto sul tuo sistema. Su Ubuntu 20.04 utilizzare il comando indicato di seguito per installare l'utilità JQ:
sudo apt install jq
Sostituisci semplicemente apt con il gestore di pacchetti del tuo sistema se stai eseguendo una distribuzione diversa da Ubuntu.
Se stai eseguendo una distribuzione come CentOS 8 che ha già JQ per impostazione predefinita, otterrai un output simile a questo:
sudo dnf install jq
Sintassi
Ora possiamo iniziare a utilizzare il comando JQ poiché è stato installato con successo sul nostro sistema, ma prima diamo un'occhiata alla sintassi del comando JQ:
jq [options] [file...]
jq [options] --args [strings...]
jq [options] --jsonargs [JSON_TEXTS...]
Il comando JQ può essere utilizzato in molti modi diversi; Può essere utilizzato direttamente su un file JSON e può anche essere combinato con molti altri comandi per interpretare i dati JSON. Il comando JQ può essere utilizzato con diversi filtri come il filtro “.”, “|”, “,”
o il “.[]”
per organizzare i dati JSON.
Il comando JQ prende anche diverse opzioni come argomenti quali il --tab
, --stream
, --indent n
, --unbuffered
, e l'opzione directory -L. La sintassi del comando JQ potrebbe sembrare complessa all'inizio, ma ne prenderai familiarità una volta letto l'intero articolo.
Come organizzare i dati JSON usando il comando JQ
La funzione più semplice e utilizzata di frequente dei filtri di comando JQ. Sono utilizzati per organizzare e abbellire i dati JSON durante la stampa su output standard.
In questo esempio, abbiamo un file JSON chiamato employee.json e dobbiamo inviare i dati allo standard output:
{"workers":{"name": "John Brooks","id": "003"}}
Possiamo usare il comando cat per mostrare i dati:
cat employee.json
I dati stampati sullo standard output utilizzando il comando cat sono disorganizzati e disordinati. Possiamo organizzare questi dati utilizzando il comando JQ insieme al filtro ‘.’
:
jq '.' employee.json
Ora i dati sono diventati molto più organizzati, colorati e più facili da capire. Questo filtro è particolarmente necessario quando si accede ai dati dalle API; I dati archiviati nelle API possono essere molto disorganizzati e confusi.
Come accedere a una proprietà utilizzando il comando JQ
Il filtro .field insieme al comando JQ può essere utilizzato per accedere alla proprietà dell'oggetto nella shell.
Se vogliamo solo accedere e stampare una singola proprietà sullo standard output, possiamo usare l'operatore .field. Ad esempio per accedere alla proprietà del lavoratore possiamo usare questo comando:
jq '.workers' employee.json
Possiamo anche accedere agli elementi presenti all'interno della proprietà utilizzando l'operatore .field. Per accedere alla voce nome nella proprietà del lavoratore utilizzeremo:
jq '.workers.name' employee.json
Come accedere a un elemento dell'array utilizzando il comando JQ
Possiamo anche accedere e restituire gli elementi presenti all'interno di un array in un file JSON utilizzando l'operatore .[]
. Per questo esempio modificheremo il nostro file JSON in modo che assomigli a questo:
[{"name": "John Brooks","id": "003"},{"name": "Randy Park","id": "053"},{"name": "Todd Gray","id": "009"}]
Per produrre tutti gli array presenti nel file JSON eseguiremo il comando indicato di seguito:
jq '.[]' employee.json
Per produrre solo il secondo array possiamo modificare il comando sopra indicato nel modo seguente:
jq '.[1]' employee.json
Ricorda che l'array inizia da 0 (zero).
Possiamo anche accedere alle proprietà presenti all'interno dell'array utilizzando l'operatore .field. Ad esempio, se vogliamo accedere alla proprietà name nel terzo array, eseguiremo il seguente comando:
jq '.[2].name' employee.json
Allo stesso modo, per accedere a tutte le proprietà del nome all'interno degli array possiamo eseguire questo comando:
jq '.[].name' employee.json
Conclusione
Il comando JQ viene utilizzato per trasformare i dati JSON in un formato più leggibile e stamparli sull'output standard su Linux. Il comando JQ è costruito attorno ai filtri che vengono utilizzati per trovare e stampare solo i dati richiesti da un file JSON.
In questa guida pratica, abbiamo imparato a utilizzare il comando JQ per organizzare e filtrare i dati JSON.