Analisi JSON Python: serializzazione e deserializzazione

Scopri come leggere, scrivere e analizzare i dati JSON in Python. Padroneggiare json.loads, json.dumps e personalizzare codificatori/decodificatori JSON.

Prova nell'editor

Panoramica

JSON (JavaScript Object Notation) è il formato leggero di interscambio di dati che domina le moderne API Web, configurazioni e payload di database. Poiché le strutture JSON assomigliano ai dizionari e agli elenchi Python, la traduzione tra di loro è incredibilmente semplice. Python è dotato di un modulo `json` integrato, che semplifica l'analisi delle stringhe JSON in oggetti Python e la riconversione degli oggetti Python in stringhe JSON.

Il processo di traduzione di un oggetto Python (come un dizionario) in una stringa JSON grezza è chiamato serializzazione o codifica. Questo è gestito da `json.dumps()` (per le stringhe) e `json.dump()` (per scrivere direttamente su un file). Puoi controllare parametri di formattazione come "indent" per abbellire il JSON o "sort_keys" per mantenere gli attributi in ordine alfabetico. Al contrario, l'analisi di una stringa JSON in un dizionario Python è chiamata deserializzazione, eseguita tramite `json.loads()` e `json.load()`.

Mentre i tipi Python standard come stringhe, numeri, elenchi e dict vengono serializzati automaticamente in JSON, gli oggetti personalizzati (come classi o oggetti datetime) no. Il tentativo di codificare direttamente un oggetto personalizzato solleverà un `TypeError`. Per superare questo problema, gli sviluppatori devono creare una classe di codifica personalizzata che erediti da "json.JSONEncoder" e sovrascriva il metodo ".default()" per serializzare le classi in dizionari leggibili. Padroneggiare la manipolazione di JSON è fondamentale per comunicare con servizi Web esterni.

Codice e output di esecuzione

Convertire un dizionario in una stringa JSON e analizzarlo nuovamente utilizzando la libreria json integrata.

json_demo.py
Prova nell'editor
import json

# Python Dictionary representing a user profile
user_profile = {
    "name": "Alex",
    "is_premium": True,
    "skills": ["Python", "Docker"],
    "age": 28
}

# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)

# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")
Uscita terminale
--- JSON String ---
{
  "name": "Alex",
  "is_premium": true,
  "skills": [
    "Python",
    "Docker"
  ],
  "age": 28
}

--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python

Implementazione passo dopo passo

  • Invio di payload e lettura di dati dalle API REST
  • Memorizzazione delle preferenze di configurazione all'interno dei file settings.json
  • Passaggio di payload strutturati tra microservizi

Domande frequenti

Qual è la differenza tra json.dump e json.dumps?

json.dump (senza la 's') scrive i dati JSON direttamente in un flusso di file. json.dumps (con la 's') serializza i dati in una variabile stringa Python.

Come gestisci gli errori di decodifica JSON?

Avvolgi il codice di analisi in un blocco try/eccetto che cattura "json.JSONDecodeError" per gestire con garbo le stringhe JSON non valide.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.