Json In Python
JSON in Python¶
Obiettivi della Lezione¶
Al termine di questa lezione, sarai in grado di:
- Comprendere cos’è JSON e perché è ampiamente utilizzato.
- Leggere e scrivere dati in formato JSON utilizzando Python.
- Serializzare (convertire) oggetti Python in stringhe JSON.
- Deserializzare (ricostruire) oggetti Python da stringhe JSON.
- Utilizzare il modulo
json
di Python per manipolare i dati JSON efficacemente.
Introduzione¶
JSON (JavaScript Object Notation) è un formato leggero per lo scambio di dati, facile da leggere e scrivere sia per gli esseri umani che per le macchine. Grazie alla sua semplicità e alla sua compatibilità con molti linguaggi di programmazione, JSON è diventato uno standard de facto per la trasmissione di dati tra applicazioni web e server.
Python offre un supporto nativo per JSON tramite il modulo json
, che consente di convertire facilmente tra oggetti Python e stringhe JSON. Questa lezione esplorerà come utilizzare il modulo json
per lavorare con dati JSON in Python.
Spiegazione Teorica¶
Cos’è JSON?¶
JSON è un formato di testo per la rappresentazione di strutture dati e oggetti. È basato su una sottoinsieme della notazione di oggetto di JavaScript, ma è indipendente dal linguaggio, il che lo rende ideale per lo scambio di dati tra sistemi diversi.
Esempio di un oggetto JSON:
{
"nome": "Mario",
"età": 30,
"città": "Roma",
"hobby": ["lettura", "viaggi", "cinema"]
}
Il Modulo json
di Python¶
Python include il modulo json
per lavorare con JSON. Questo modulo fornisce metodi per:
- Serializzare oggetti Python in stringhe JSON (
dump
edumps
). - Deserializzare stringhe JSON in oggetti Python (
load
eloads
).
Serializzazione: Convertire Oggetti Python in JSON¶
La serializzazione è il processo di conversione di un oggetto Python in una stringa JSON.
Funzioni principali:
json.dump(obj, fp)
: scrive l’oggetto serializzato nel filefp
.json.dumps(obj)
: restituisce una stringa JSON rappresentante l’oggettoobj
.
Deserializzazione: Convertire JSON in Oggetti Python¶
La deserializzazione è il processo inverso, ovvero convertire una stringa JSON in un oggetto Python.
Funzioni principali:
json.load(fp)
: legge una stringa JSON dal filefp
e restituisce l’oggetto Python corrispondente.json.loads(s)
: converte la stringa JSONs
in un oggetto Python.
Tipi di Dati Compatibili¶
La conversione tra tipi di dati Python e JSON avviene come segue:
Python | JSON |
---|---|
dict |
oggetto |
list , tuple |
array |
str |
stringa |
int , float |
numero |
True |
true |
False |
false |
None |
null |
Esempi Pratici di Codice¶
Serializzare un Oggetto Python in JSON¶
import json
# Oggetto Python
dati = {
"nome": "Luigi",
"età": 25,
"città": "Milano",
"hobby": ["calcio", "musica"]
}
# Serializzazione
dati_json = json.dumps(dati)
print(dati_json)
{"nome": "Luigi", "etu00e0": 25, "cittu00e0": "Milano", "hobby": ["calcio", "musica"]}
Spiegazione:
- Importiamo il modulo
json
. - Creiamo un dizionario Python
dati
. - Usiamo
json.dumps(dati)
per convertire il dizionario in una stringa JSON. - Stampiamo la stringa JSON risultante.
Deserializzare una Stringa JSON in un Oggetto Python¶
import json
# Stringa JSON
dati_json = '{"nome": "Anna", "età": 22, "città": "Torino", "hobby": ["pittura", "danza"]}'
# Deserializzazione
dati = json.loads(dati_json)
print(dati)
{'nome': 'Anna', 'età': 22, 'città': 'Torino', 'hobby': ['pittura', 'danza']}
Spiegazione:
- Definiamo una stringa JSON
dati_json
. - Usiamo
json.loads(dati_json)
per convertire la stringa JSON in un oggetto Python. - Stampiamo l’oggetto Python risultante.
Scrivere Dati JSON su un File¶
import json
dati = {
"nome": "Giovanni",
"età": 28,
"città": "Napoli",
"hobby": ["fotografia", "cucina"]
}
with open('dati.json', 'w') as file:
json.dump(dati, file)
Spiegazione:
- Apriamo (o creiamo) un file
dati.json
in modalità scrittura. - Usiamo
json.dump(dati, file)
per scrivere l’oggetto serializzato nel file.
Leggere Dati JSON da un File¶
import json
with open('dati.json', 'r') as file:
dati = json.load(file)
print(dati)
{'nome': 'Giovanni', 'età': 28, 'città': 'Napoli', 'hobby': ['fotografia', 'cucina']}
Spiegazione:
- Apriamo il file
dati.json
in modalità lettura. - Usiamo
json.load(file)
per leggere e deserializzare i dati. - Stampiamo l’oggetto Python ottenuto.
Esercizi Interattivi¶
Esercizio 1: Serializzazione Personalizzata¶
Crea un dizionario Python che contiene le seguenti informazioni su un libro:
- Titolo
- Autore
- Anno di pubblicazione
- Generi (lista di generi)
Serializza questo dizionario in una stringa JSON e stampala.
Soluzione:
import json
libro = {
"titolo": "Il Signore degli Anelli",
"autore": "J.R.R. Tolkien",
"anno": 1954,
"generi": ["Fantasy", "Avventura"]
}
libro_json = json.dumps(libro)
print(libro_json)
{"titolo": "Il Signore degli Anelli", "autore": "J.R.R. Tolkien", "anno": 1954, "generi": ["Fantasy", "Avventura"]}
Esercizio 2: Deserializzazione da Stringa¶
Hai ricevuto la seguente stringa JSON:
'{"nome": "Elisa", "età": 27, "linguaggi": ["Python", "Java", "C++"]}'
Deserializza questa stringa in un oggetto Python e accedi al secondo linguaggio della lista.
Soluzione:
import json
dati_json = '{"nome": "Elisa", "età": 27, "linguaggi": ["Python", "Java", "C++"]}'
dati = json.loads(dati_json)
secondo_linguaggio = dati['linguaggi'][1]
print(secondo_linguaggio)
Java
Esercizio 3: Lettura e Scrittura su File¶
Scrivi un programma Python che:
- Crea un elenco di dizionari, ognuno dei quali rappresenta uno studente con nome, età e voto finale.
- Scrive questo elenco in un file
studenti.json
. - Legge i dati dal file
studenti.json
e stampa la lista degli studenti.
Soluzione:
import json
studenti = [
{"nome": "Marco", "età": 20, "voto": 28},
{"nome": "Laura", "età": 22, "voto": 30},
{"nome": "Luca", "età": 21, "voto": 27}
]
# Scrittura su file
with open('studenti.json', 'w') as file:
json.dump(studenti, file)
# Lettura dal file
with open('studenti.json', 'r') as file:
dati_studenti = json.load(file)
print(dati_studenti)
[{'nome': 'Marco', 'età': 20, 'voto': 28}, {'nome': 'Laura', 'età': 22, 'voto': 30}, {'nome': 'Luca', 'età': 21, 'voto': 27}]
Buone Pratiche e Consigli¶
Gestione degli Errori: Quando si lavora con dati esterni, come file JSON ricevuti da un’API, è importante gestire le possibili eccezioni utilizzando blocchi
try...except
per catturare errori di parsing o file mancanti.try: with open('dati.json', 'r') as file: dati = json.load(file) except FileNotFoundError: print("Il file non esiste.") except json.JSONDecodeError: print("Errore nel decodificare il JSON.")
Formattazione Leggibile: Quando si scrive JSON su un file o si stampa sullo schermo, puoi utilizzare i parametri
indent
esort_keys
per migliorare la leggibilità.dati_json = json.dumps(dati, indent=4, sort_keys=True) print(dati_json)
Conversione di Oggetti Personalizzati: Se hai oggetti Python personalizzati, puoi definire una funzione di serializzazione personalizzata.
def serializza_obj(obj): return obj.__dict__ json_str = json.dumps(oggetto_personalizzato, default=serializza_obj)
Evitare Dati Sensibili: Assicurati di non serializzare informazioni sensibili o personali in JSON, soprattutto quando i dati saranno trasmessi su reti non sicure.
Conclusione¶
In questa lezione, abbiamo esplorato come Python interagisce con il formato JSON utilizzando il modulo integrato json
. Abbiamo visto come serializzare e deserializzare dati, leggere e scrivere file JSON, e applicare queste conoscenze in esempi pratici.
La capacità di lavorare con JSON è fondamentale per sviluppare applicazioni moderne che comunicano con API web, servizi remoti e applicazioni diverse.
Risorse Aggiuntive¶
- Documentazione Ufficiale Python: JSON
- Libro Consigliato: Python Crash Course di Eric Matthes
- Video Tutorial: Working with JSON Data using the json Module