Introduzione

JSON è un formato di dati basato su testo leggibile dall'uomo. È indipendente dalla lingua e utilizzato per lo scambio di dati tra applicazioni.

In questo articolo, spiegheremo come analizzare i dati JSON in Python.

Python JSON

Il modulo json che consente di codificare e decodificare i dati JSON fa parte della libreria standard Python.

JSON è una stringa che rappresenta i dati. Codificare o serializzare significa trasformare un oggetto Python in una stringa JSON che può essere memorizzata in un file o trasmessa sulla rete. Decodifica o deserializzazione del processo inverso di codifica in cui una stringa JSON viene trasformata in oggetto Python.

Di seguito vediamo una tabella che mostra gli oggetti Python e la loro rappresentazione JSON equivalente:

PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

Per lavorare con JSON è sufficiente importare il modulo nella parte superiore del file:

import json

Codificare un JSON in Python

Il modulo json ha due metodi per codificare gli oggetti Python in stringhe formattate JSON: dump() e dumps().

Il metodo dump() invia l'output a un oggetto simile a un file. Sono necessari due argomenti posizionali: l'oggetto da codificare e l'oggetto simile a un file. Ecco un esempio:

data = {
    "country": "Germany",
    "vehicle": {
        "name": "Volkswagen",
        "model": "T-Roc"
    }
}

with open("file.json", "w") as file:
    json.dump(data, file)

Se si esegue lo script, verrà creato un file denominato file.json con il seguente contenuto:

{"country": "Germany", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}

Il metodo dumps() funziona come dump() ma invece di inviare l'output a un oggetto simile a un file, restituisce una stringa:

data = {
    "country": "Germany",
    "vehicle": {
        "name": "Volkswagen",
        "model": "T-Roc"
    }
}

json.dumps(data)
'{"country": "Germany", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}'

Entrambi i metodi accettano gli stessi argomenti di parole chiave. Ad esempio, se stai analizzando o eseguendo il debug dei dati JSON potresti voler specificare il livello di rientro:

data = {
    "country": "Germany",
    "vehicle": {
        "name": "Volkswagen",
        "model": "T-Roc"
    }
}

print(json.dumps(data, indent=2))
{
  "country": "Germany",
  "vehicle": {
    "name": "Volkswagen",
    "model": "T-Roc"
  }
}

Decodificare un JSON in Python

Per trasformare i dati codificati JSON in oggetti Python, utilizzare i metodi load() e loads().

Il metodo load() legge la struttura JSON da un oggetto simile a un file e lo trasforma in un oggetto Python.

Supponiamo di avere il seguente file JSON:

[
  {
    "userId": 1,
    "id": 1,
    "title": "Meet with Lisa",
    "completed": true
  },
  {
    "userId": 1,
    "id": 2,
    "title": "Design a prototype",
    "completed": false
  }
]

Per trasformare i dati JSON in una rappresentazione Python, dovresti usare qualcosa del genere:

import json

with open('file.json') as f:
  data = json.load(f)

type(data)

Il JSON viene trasformato in un elenco Python, che puoi utilizzare nel tuo codice:

<class 'list'>

Il metodo loads() converte una stringa contenente un documento JSON in un oggetto Python:

import json

json_str= '{"userId": "1", "id": "1", "title": "Meet with Lisa", "completed": "True"}'

print(json.loads(json_str))

La stringa viene trasformata in un dizionario Python:

{'userId': '1', 'id': '1', 'title': 'Meet with Lisa', 'completed': 'True'}

Ecco un esempio più avanzato che mostra come effettuare una richiesta API e decodificare i dati JSON:

import json
import requests

response = requests.get("https://jsonplaceholder.typicode.com/users")
users = json.loads(response.text)

print(users)

Conclusione

In questo tutorial abbiamo visto come codificare e decodificare i dati JSON in Python.