Come analizzare JSON in Python

JSON è un formato popolare per lo scambio di dati. Python viene fornito con un modulo JSON integrato per analizzare e lavorare con i dati JSON. E questo tutorial ti insegnerà tutto su come lavorare con JSON in Python.

Alla fine di questo tutorial, avrai imparato:

  • le basi di JSON,
  • come analizzare e creare stringhe JSON in Python e
  • come leggere e scrivere su file JSON in Python.

Iniziamo!⏳

Cos’è JSON?

JSON sta per JavaScript Object Notation ed è un formato basato su testo per lo scambio di dati. Sebbene JSON sia inizialmente ispirato da oggetti JavaScript, quasi tutti i linguaggi di programmazione supportano l’utilizzo di JSON.

Se hai mai lavorato con le API o letto i file di configurazione, probabilmente ti saresti imbattuto in JSON.

📑 Invii e ricevi dati in JSON quando esegui query sulle API. E JSON è anche ampiamente utilizzato nella comunicazione client-server nelle applicazioni software. Inoltre, puoi utilizzare JSON anche per l’archiviazione di dati generici.

Il formato di JSON è molto simile a quello di un dizionario Python. I dizionari sono potenti strutture dati integrate in Python che memorizzano i dati in coppie chiave-valore.

Prima di andare oltre, ecco alcuni punti degni di nota:

  • In Python, un oggetto JSON viene archiviato come dizionario.
  • Un array in JSON viene archiviato come elenco Python.
  • In JSON, i valori booleani sono indicati come true e false. In Python, questi vengono convertiti nei booleani True e False.

Per maggiori dettagli sui tipi di dati che vengono tradotti da JSON a Python, leggi i documenti qui.

Poiché il modulo json fa parte della libreria standard di Python, non è necessario installarlo. Puoi importare nella tua directory corrente, in questo modo:

import json

Come caricare una stringa JSON in Python

La sintassi generale per caricare una stringa JSON in Python è:

<dict_obj> = json.loads(<json_str>)

Qui,

  • è il dizionario Python in cui desideri caricare la stringa JSON,
  • è qualsiasi stringa JSON valida.

Questo carica nel dizionario Python .

Codifichiamo un esempio. Qui json_str è una stringa JSON.

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

E il frammento di codice seguente mostra come caricare la stringa JSON json_str in un dizionario Python usando il metodo load(). Puoi usare la funzione type() incorporata per verificare che py_dict sia un dizionario Python.

py_dict = json.loads(json_str)

type(py_dict)

# Output: dict

print(py_dict)

# Output
{'books': [{'title': 'The Wind in the Willows', 
'author': 'Kenneth Grahame', 'year': '1908'}, 
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Come mostrato nel codice sopra, tutti i campi nella stringa JSON sono coppie chiave-valore in py_dict.

Come creare stringhe JSON in Python

Supponiamo che tu abbia un dizionario Python. Quindi, come si crea una stringa JSON da essa?

Puoi farlo usando il metodo dumps() con questa sintassi:

<json_str> = json.dumps(<dict_obj>)

Qui,

  • è il dizionario Python da cui desideri creare la stringa JSON,
  • è la stringa JSON risultante.

Quindi il metodo dumps() esegue il dump di in una stringa JSON .

Al nostro dizionario Python esistente py_dict. aggiungiamo una nuova chiave “film”. Puoi farlo come mostrato nel seguente frammento di codice:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Ora, eseguiamo il dump del dizionario modificato in una nuova stringa JSON json_str2 usando il metodo dumps().

json_str2 = json.dumps(py_dict)

print(json_str2)

# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, 
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], 
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Come puoi vedere nell’esempio sopra, la stringa JSON di output è difficile da leggere senza una formattazione adeguata. È possibile utilizzare il rientro del parametro facoltativo per aggiungere il rientro.

E puoi farlo impostando il rientro su un numero intero come 2, come mostrato di seguito:

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# Output
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

Osserva come l’output è stato formattato con il rientro ed è facile da seguire.

Nota: 💡 Se vuoi che le chiavi siano ordinate in ordine alfabetico, puoi impostare il parametro sort_keys su True.

Come puoi vedere nello snippet di codice qui sotto, le chiavi sono state ordinate in ordine alfabetico.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# Output
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]

E ora le chiavi appaiono in ordine alfabetico: “autore”, “titolo” e “anno”.

Finora, hai imparato a lavorare con le stringhe JSON in Python. Nella prossima sezione imparerai come lavorare con i file JSON.

Come leggere un file JSON in Python

Per leggere un file JSON in Python, usa la seguente sintassi:

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

Nota come utilizziamo il metodo load() e non il metodo load(). load() carica una stringa JSON, mentre load() carica un file JSON.

Dovresti considerare l’utilizzo di gestori di contesto quando lavori con i file in Python. Puoi anche provare a leggere i file come segue, senza utilizzare il gestore di contesto:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Se non chiudi il file, potrebbe esserci un potenziale spreco di risorse.

Tuttavia, quando si lavora con i gestori di contesto, i file vengono chiusi automaticamente una volta completate le operazioni sui file.

E puoi usare il gestore del contesto per leggere i file, come mostrato di seguito:

with open('students.json','r') as file:   
   data = json.load(file) 
   print(data) 

# Output 

{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, 
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Mentre stai leggendo da un file, specifica la modalità di lettura, indicata da ‘r’ nel codice sopra.

Nota: per navigare facilmente nella directory corrente, assicurati che il file JSON si trovi nella stessa cartella di main.py, come mostrato nell’immagine seguente. Se il tuo file JSON si trova in una cartella diversa, assicurati di specificare il percorso del file.

Leggi il file JSON in Python.

Nella prossima sezione imparerai come scrivere su un file JSON.✍

Come scrivere su un file JSON in Python

Per scrivere su un file JSON esistente o per creare un nuovo file JSON, utilizzare il metodo dump() come mostrato:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Quindi la sintassi precedente esegue il dump del dizionario nel file JSON .

Nella sezione precedente, avevamo il dizionario py_dict. Ora eseguiamo il dump in un nuovo file JSON. E chiamiamolo new_file.json.

E la seguente cella di codice mostra come utilizzare la funzione dump():

with open('new_file.json','w') as file:
  json.dump(py_dict,file)

Nota: l’apertura di un file in modalità di scrittura (w) sovrascrive il contenuto se il file esiste. Se il file non esiste, il file viene creato.

Dopo aver eseguito la cella di codice sopra, vedrai che è stato creato un nuovo file JSON nella directory di lavoro corrente. E puoi andare avanti ed esaminare il contenuto del file JSON.

Crea file JSON in Python

Quando si scrive su file, l’obiettivo principale è l’archiviazione dei dati. E se desideri preservare la formattazione, puoi anche utilizzare i parametri indent e sort_keys.

Conclusione

⏲ ​​È tempo di un breve riassunto.

In questo tutorial, hai imparato:

  • le basi dell’utilizzo di JSON,
  • come utilizzare i metodi load() e load() per leggere rispettivamente la stringa JSON e i file JSON,
  • come utilizzare i metodi dumps() e dump() per eseguire il dump dei dizionari Python rispettivamente in stringhe JSON e file JSON.

Spero che questo tutorial ti sia stato utile. Buon apprendimento!

Puoi anche guardare gli strumenti JSON per analizzare, formattare e convalidare.