Salta ai contenuti
Manuale LogoManuale Logo

JSON

Quando un’app mostra dati provenienti dal web, come il meteo o i risultati di una ricerca, spesso li riceve in formato JSON.

JSON è un formato comune per scambiare informazioni tra programmi. Puoi usarlo per scaricare dati, salvarli e leggerli.

JSON (si legge “djèizon”) è un formato di testo per rappresentare dati strutturati. Assomiglia molto ai dizionari e alle liste Python:

{
"nome": "Alice",
"eta": 16,
"voti": [8, 7, 9, 6],
"indirizzo": {
"citta": "Roma",
"cap": "00100"
},
"attivo": true
}

È leggibile dalle persone, soprattutto se indentato, e può essere interpretato dai programmi.

import json

dumps() converte un dizionario o una lista Python in una stringa JSON, utile per inviare o stampare dati.

import json
dati = {
"nome": "Alice",
"eta": 16,
"voti": [8, 7, 9],
"attivo": True, # Python: True → JSON: true
"media": None # Python: None → JSON: null
}
# Converti in stringa JSON (su una riga)
json_stringa = json.dumps(dati)
print(json_stringa)
# → {"nome": "Alice", "eta": 16, "voti": [8, 7, 9], "attivo": true, "media": null}
# Converti in stringa JSON leggibile (con indentazione)
json_bello = json.dumps(dati, indent=4)
print(json_bello)

Output indentato:

{
"nome": "Alice",
"eta": 16,
"voti": [8, 7, 9],
"attivo": true,
"media": null
}
Python JSON
dict {} (oggetto)
list [] (array)
str "..." (stringa)
int, float numero
True / False true / false
None null

loads() esegue l’operazione inversa: converte una stringa JSON in un dizionario o una lista Python.

import json
stringa_json = '{"nome": "Alice", "eta": 16, "voti": [8, 7, 9]}'
dati = json.loads(stringa_json) # Converti la stringa in dizionario Python
print(dati["nome"]) # Alice
print(dati["voti"]) # [8, 7, 9]
print(type(dati)) # <class 'dict'>

dump() (senza la “s”) scrive direttamente in un file:

import json
studenti = [
{"nome": "Alice", "eta": 16, "voto": 8},
{"nome": "Bob", "eta": 15, "voto": 7},
]
with open("studenti.json", "w") as file:
json.dump(studenti, file, indent=4) # Scrive il JSON nel file, ben indentato

Il file studenti.json conterrà:

[
{
"nome": "Alice",
"eta": 16,
"voto": 8
},
...
]

load() legge un file JSON e lo converte in una struttura Python:

import json
with open("studenti.json", "r") as file:
studenti = json.load(file) # Legge il file e converte in lista Python
for studente in studenti:
print(f"{studente['nome']}: {studente['voto']}")
# → Alice: 8
# → Bob: 7

Se la stringa JSON non è valida, per esempio perché contiene una virgola di troppo, Python solleva un errore. Puoi gestirlo con try/except:

import json
try:
dati = json.loads("questo non è JSON valido!!!")
except json.JSONDecodeError as e:
print(f"Errore: il testo non è JSON valido, {e}")

JSON si usa spesso per salvare le impostazioni di un programma in un file modificabile dall’utente:

import json
# Salva le impostazioni
config = {
"tema": "scuro",
"lingua": "italiano",
"notifiche": True,
"volume": 75
}
with open("config.json", "w") as f:
json.dump(config, f, indent=2)
# La prossima volta che il programma parte, ricarica le impostazioni
with open("config.json", "r") as f:
config_caricata = json.load(f)
print(f"Tema: {config_caricata['tema']}") # Tema: scuro
print(f"Lingua: {config_caricata['lingua']}") # Lingua: italiano