Vai al contenuto principale

Dati JSON in Python: guida con esempi

Scopri come lavorare con JSON in Python: serializzazione, deserializzazione, formattazione, ottimizzazione delle prestazioni, utilizzo con le API e limiti e alternative di JSON.
Aggiornato 3 giu 2026  · 6 min leggi

JSON (JavaScript Object Notation) è un formato leggero per lo scambio di dati che è diventato una scelta popolare per l’interoperabilità tra molte lingue di programmazione, tra cui Python. Con la sua sintassi semplice e la capacità di rappresentare strutture dati complesse, JSON è parte integrante dello sviluppo web moderno, alimentando tutto, dalle API alle applicazioni web lato client. 

In questo tutorial esplorerò le basi del lavoro con JSON in Python, inclusi serializzazione, deserializzazione, lettura e scrittura di file JSON, formattazione e altro ancora. Alla fine del tutorial, saprai:

  • Comprendere cos’è JSON e i suoi pro e contro
  • Individuare i casi d’uso di JSON e confrontarlo con le alternative più comuni
  • Serializzare e deserializzare dati JSON in modo efficace in Python
  • Lavorare con dati JSON nel linguaggio di programmazione Python
  • Formattare i dati JSON in Python usando la libreria `json`
  • Ottimizzare le prestazioni quando lavori con dati JSON
  • Gestire i dati JSON nello sviluppo di API.

Che cos’è JSON?

JSON (JavaScript Object Notation) è un formato di interscambio dati leggero e indipendente dal linguaggio, ampiamente adottato e supportato da molti linguaggi e framework. È una buona scelta per lo scambio di dati quando serve un formato semplice e leggibile che supporti strutture dati complesse e possa essere facilmente condiviso tra diversi programmi.

Il caso d’uso perfetto per JSON è quando c’è bisogno di scambiare dati tra applicazioni web, ad esempio quando compili un modulo su un sito e le informazioni vengono inviate a un server per l’elaborazione. 

JSON è ideale in questo scenario perché è un formato leggero ed efficiente che richiede meno banda e spazio di archiviazione rispetto ad altri formati come XML. Inoltre, JSON supporta strutture dati complesse come oggetti annidati e array, il che rende semplice rappresentare e scambiare dati strutturati tra sistemi diversi. Altri casi d’uso del formato JSON sono:

  1. Application Programming Interface (API). JSON è comunemente usato per costruire API (Application Programming Interfaces) che consentono a sistemi e applicazioni diversi di comunicare tra loro. Per esempio, molte API web usano JSON come formato per lo scambio dei dati tra applicazioni, facilitando l’integrazione con vari linguaggi e piattaforme.
  2. File di configurazione. JSON offre un formato semplice e leggibile per archiviare e recuperare dati di configurazione. Questo può includere impostazioni dell’applicazione, come il layout dell’interfaccia utente o le preferenze dell’utente.
  3. IoT (Internet of Things).  I dispositivi IoT spesso generano grandi quantità di dati, che possono essere archiviati e trasmessi tra sensori e altri dispositivi in modo più efficiente usando JSON. 

Processo di richiesta JSON

Esempio di dati JSON

python_obj = {
  "name": "John Doe",
  "age": 30,
  "email": "[email protected]",
  "is_employee": True,
  "hobbies": [
    "reading",
    "playing soccer",
    "traveling"
  ],
  "address": {
    "street": "123 Main Street",
    "city": "New York",
    "state": "NY",
    "zip": "10001"
  }
}

print(python_obj)

In questo esempio abbiamo un oggetto JSON che rappresenta una persona. L’oggetto ha diverse proprietà: name, age, email e is_employee. La proprietà hobbies è un array che contiene tre stringhe. La proprietà address è un oggetto con diverse proprietà a sua volta, come street, city, state e zip.

Nota che i dati JSON sono in genere formattati come una serie di coppie chiave-valore, con la chiave rappresentata come stringa e il valore rappresentato in vari tipi come stringa, numero, booleano, array o oggetto.

Vantaggi e svantaggi dell’uso di JSON

Di seguito abbiamo raccolto alcuni aspetti positivi e negativi dell’uso di JSON. 

Pro del lavoro con un file JSON:

Alcuni dei principali vantaggi di JSON includono il fatto che è:

  1. Leggero e facile da leggere. I file JSON sono facili da leggere e comprendere, anche per chi non è tecnico. Sono inoltre leggeri, quindi possono essere trasmessi facilmente su Internet.
  2. Interoperabile: i file JSON sono interoperabili, ossia possono essere scambiati facilmente tra sistemi e piattaforme diverse. Questo perché JSON è uno standard ampiamente supportato e molte applicazioni e servizi lo usano per lo scambio di dati. Di conseguenza, lavorare con file JSON può rendere più semplice integrare parti diverse di un sistema o condividere dati tra applicazioni.
  3. Facile da convalidare: i file JSON possono essere facilmente convalidati rispetto a uno schema per garantire che rispettino una struttura o un insieme di regole specifico. Questo aiuta a intercettare errori e incongruenze nei dati in anticipo, risparmiando tempo e prevenendo problemi successivi. Gli schemi JSON possono anche essere usati per generare automaticamente la documentazione dei dati archiviati nel file JSON.

Contro del lavoro con un file JSON:

  1. Supporto limitato per strutture dati complesse: sebbene i file JSON supportino un’ampia gamma di tipi di dati, non sono adatti a memorizzare strutture complesse come grafi o alberi. Questo può rendere difficile lavorare con determinati tipi di dati usando file JSON.
  2. Nessuna imposizione di schema: i file JSON non impongono alcuno schema, quindi è possibile archiviare nel file dati incoerenti o non validi. Questo può causare errori e bug nelle applicazioni che fanno affidamento sui dati del file.
  3. Capacità limitate di query e indicizzazione: i file JSON non offrono lo stesso livello di funzionalità di interrogazione e indicizzazione dei database tradizionali. Questo può rendere difficile eseguire ricerche complesse o recuperare sottoinsiemi specifici di dati da un grande file JSON.

Migliori alternative a JSON per uno scambio dati efficiente


Esistono diverse alternative a JSON per lo scambio o l’archiviazione dei dati, ciascuna con punti di forza e debolezze. Alcune alternative popolari a JSON sono:

  1. XML (Extensible Markup Language). XML è un linguaggio di markup che usa tag per definire gli elementi e attributi per descrivere i dati. È un formato più verboso di JSON, ma ha un forte supporto per la validazione tramite schema e la struttura del documento.
  2. YAML (Yet Another Markup Language). YAML è un formato di serializzazione dei dati leggibile per gli esseri umani, progettato per essere facile da leggere e scrivere. È più conciso dell’XML e supporta tipi di dati complessi e commenti.
  3. MessagePack. MessagePack è un formato di serializzazione binaria progettato per essere più compatto ed efficiente di JSON. Supporta tipi di dati complessi ed è ideale per trasferire dati su reti a bassa larghezza di banda.
  4. Protocol Buffers. Protocol Buffers è un formato di serializzazione binaria sviluppato da Google. È progettato per essere altamente efficiente e ha un forte supporto per la validazione tramite schema, rendendolo ideale per sistemi distribuiti su larga scala.
  5. BSON (Binary JSON). BSON è un formato di serializzazione binaria che estende JSON con ulteriori tipi di dati e ottimizzazioni per l’efficienza. È progettato per l’archiviazione e il trasferimento efficienti dei dati nei database MongoDB.

La scelta del formato di scambio dati dipende dallo specifico caso d’uso e dai requisiti dell’applicazione. JSON rimane una scelta popolare grazie alla sua semplicità, versatilità e ampia adozione, ma altri formati come XML, YAML, MessagePack, Protocol Buffers e BSON possono essere più adatti in determinati contesti.

Librerie Python per lavorare con dati JSON

Ci sono alcune librerie Python popolari che puoi usare per lavorare con file JSON:

  1. json. È un pacchetto integrato in Python che fornisce metodi per codificare e decodificare dati JSON.
  2. simplejson. Questa libreria fornisce un encoder e decoder JSON veloce con supporto per tipi specifici di Python.
  3. ujson. Questa libreria è un encoder e decoder JSON ultra-veloce per Python.
  4. jsonschema. Questa libreria permette di convalidare i dati JSON rispetto a uno schema specificato.

Serializzazione e deserializzazione JSON

La serializzazione e la deserializzazione JSON sono i processi di conversione dei dati JSON da e verso altri formati, come oggetti o stringhe Python, per trasmettere o archiviare i dati.

La serializzazione è il processo di conversione di un oggetto o di una struttura dati in una stringa JSON. Questo è necessario per trasmettere o archiviare i dati in un formato leggibile da altri sistemi o programmi. La serializzazione JSON è una tecnica comune nello sviluppo web, dove i dati sono spesso trasmessi tra sistemi o applicazioni diverse.

La deserializzazione, invece, è il processo di conversione di una stringa JSON in un oggetto o una struttura dati. Questo è necessario per utilizzare i dati in un programma o sistema. La deserializzazione JSON è spesso usata nello sviluppo web per analizzare i dati ricevuti da un’API o da un’altra fonte.

La serializzazione e deserializzazione JSON sono tecniche importanti per lavorare con dati JSON in vari contesti, dallo sviluppo web all’analisi dei dati e oltre. Molti linguaggi di programmazione forniscono librerie integrate per rendere questi processi semplici ed efficienti.

Ecco alcune funzioni comuni della libreria json usate per la serializzazione e deserializzazione.

1. json.dumps()

Questa funzione è usata per serializzare un oggetto Python in una stringa JSON. La funzione dumps() accetta un singolo argomento, l’oggetto Python, e restituisce una stringa JSON. Ecco un esempio:

import json

# Python object to JSON string
python_obj = {'name': 'John', 'age': 30}

json_string = json.dumps(python_obj)
print(json_string)  

# Expected output: {"name": "John", "age": 30}

2. json.loads()

Questa funzione è usata per analizzare una stringa JSON trasformandola in un oggetto Python. La funzione loads() accetta un singolo argomento, la stringa JSON, e restituisce un oggetto Python. Ecco un esempio: 

import json

# JSON string to Python object
json_string = '{"name": "John", "age": 30}'

python_obj = json.loads(json_string)

print(python_obj)  

# Expected output: {'name': 'John', 'age': 30}

3. json.dump()

Questa funzione è usata per serializzare un oggetto Python e scriverlo in un file JSON. La funzione dump() accetta due argomenti: l’oggetto Python e l’oggetto file. Ecco un esempio:

import json

# serialize Python object and write to JSON file
python_obj = {'name': 'John', 'age': 30}
with open('data.json', 'w') as file:
    json.dump(python_obj, file)

# No expected output

4. json.load()

Questa funzione è usata per leggere un file JSON e analizzarne il contenuto in un oggetto Python. La funzione load() accetta un singolo argomento, l’oggetto file, e restituisce un oggetto Python. Ecco un esempio:

import json

# read JSON file and parse contents
with open('data.json', 'r') as file:
    python_obj = json.load(file)
print(python_obj)  

# Expected output: {'name': 'John', 'age': 30}

Python e JSON hanno tipi di dati diversi, e Python offre una gamma più ampia di tipi rispetto a JSON. Mentre Python può archiviare strutture complesse come set e dizionari, JSON è limitato a gestire stringhe, numeri, booleani, array e oggetti. Vediamo alcune differenze:

Python

JSON

dict

Object

list

Array

tuple

Array

str

String

int

Number

float

Number

True

true

False

false

None

null

Da lista Python a JSON

Per convertire una lista Python in formato JSON puoi usare il metodo json.dumps() della libreria json.

import json

my_list = [1, 2, 3, "four", "five"]

json_string = json.dumps(my_list)

print(json_string)

# Expected output: [1, 2, 3, "four", "five"]

In questo esempio abbiamo una lista chiamata my_list con un mix di interi e stringhe. Usiamo poi il metodo json.dumps() per convertire la lista in una stringa in formato JSON, che salviamo nella variabile json_string.

Formattare i dati JSON

In Python, la funzione json.dumps() offre opzioni per formattare e ordinare l’output JSON. Ecco alcune opzioni comuni:

1. Indent

Questa opzione specifica il numero di spazi da usare per l’indentazione nella stringa JSON di output. Per esempio:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, indent=2)

print(json_data)

# Expected output: a JSON formatted string with an indentation of 2 spaces for each level of nesting:
# {
#   "name": "John",
#   "age": 30,
#   "city": "New York"
# }

2. Sort_keys

Questa opzione specifica se le chiavi nella stringa JSON di output devono essere ordinate in ordine alfabetico. Per esempio:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, sort_keys=True)

print(json_data)

# Expected output: {"age": 30, "city": "New York", "name": "John"}

3. Separators

Questa opzione ti permette di specificare i separatori usati nella stringa JSON di output. Il parametro separators accetta una tupla di due stringhe: la prima è il separatore tra le coppie chiave-valore degli oggetti JSON, la seconda è il separatore tra gli elementi negli array JSON. Per esempio:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, separators=(",", ":"))

print(json_data)

# Expected output: a JSON formatted string with a comma separator between key-value pairs and a colon separator between keys and values:
# {"name":"John","age":30,"city":"New York"}

Esempio in Python - Dati JSON nelle API

import requests
import json

url = "https://jsonplaceholder.typicode.com/posts"
response = requests.get(url)

if response.status_code == 200:
    data = json.loads(response.text)
    print(data)
else:
    print(f"Error retrieving data, status code: {response.status_code}")

# Expected output: a JSON object as the response of the request

OUTPUT FORMATTATO:

Dati di output

Questo codice usa la libreria requests e la libreria json in Python per effettuare una richiesta all’URL "https://jsonplaceholder.typicode.com/posts" e recuperare dati. La riga requests.get(url) effettua la richiesta vera e propria e memorizza la risposta nella variabile response.

La riga if response.status_code == 200: controlla se il codice di risposta è 200, il che significa che la richiesta è andata a buon fine. Se la richiesta ha successo, il codice carica il testo della risposta in un dizionario Python usando il metodo json.loads() e lo memorizza nella variabile data.


Se vuoi approfondire l’argomento, dai un’occhiata al nostro tutorial su Web API, Python Requests e come eseguire una richiesta HTTP in Python.

Ottimizzare le prestazioni di JSON in Python

Quando lavori con grandi quantità di dati JSON in Python, è importante ottimizzare le prestazioni del codice per garantirne l’efficienza. Ecco alcuni suggerimenti per ottimizzare le prestazioni con JSON in Python:

  1. Usa le librerie cjson o ujson. Queste librerie sono più veloci della libreria JSON standard di Python e possono migliorare significativamente le prestazioni di serializzazione e deserializzazione JSON.
  2. Evita conversioni non necessarie. Convertire ripetutamente tra oggetti Python e dati JSON può essere costoso in termini di prestazioni. Se possibile, prova a lavorare direttamente con i dati JSON ed evita conversioni superflue.
  3. Usa i generatori per grandi quantità di dati JSON. Quando lavori con grandi moli di dati JSON, usare i generatori può aiutare a ridurre l’uso di memoria e migliorare le prestazioni.
  4. Minimizza l’overhead di rete. Quando trasmetti dati JSON su una rete, ridurre la quantità di dati trasferiti può migliorare le prestazioni. Usa tecniche di compressione come gzip per ridurre la dimensione dei dati JSON prima di trasmetterli.
  5. Usa la cache. Se accedi spesso agli stessi dati JSON, metterli in cache può migliorare le prestazioni riducendo il numero di richieste per caricarli.
  6. Ottimizza la struttura dei dati: anche la struttura dei dati JSON può influire sulle prestazioni. Una struttura più semplice e piatta può essere più performante di una molto annidata e complessa.

Limitazioni del formato JSON

Sebbene JSON sia un formato popolare per lo scambio di dati in molte applicazioni, ci sono alcune limitazioni implementative da considerare:

  1. Mancanza di supporto per alcuni tipi di dati. JSON ha un supporto limitato per alcuni tipi di dati, come dati binari, date e orari. Sebbene esistano soluzioni alternative per rappresentarli in JSON, possono complicare serializzazione e deserializzazione.
  2. Mancanza di supporto per i commenti. A differenza di altri formati, come YAML e XML, JSON non supporta i commenti. Questo può rendere più difficile aggiungere note ai dati JSON per fornire contesto o documentazione.
  3. Flessibilità limitata per le estensioni. Sebbene JSON supporti estensioni tramite proprietà personalizzate o la proprietà $schema, il formato non offre la stessa flessibilità per le estensioni di altri formati come XML o YAML.
  4. Nessuno standard per preservare l’ordine delle chiavi. JSON non ha un modo standard per preservare l’ordine delle chiavi in un oggetto, rendendo più difficile confrontare o unire oggetti JSON.
  5. Supporto limitato per i riferimenti circolari. JSON ha un supporto limitato per i riferimenti circolari, in cui un oggetto fa riferimento a sé stesso. Questo può rendere più difficile rappresentare alcune strutture dati in JSON.

È importante essere consapevoli di queste limitazioni implementative quando si lavora con dati JSON, per assicurarsi che il formato sia adatto alle proprie esigenze ed evitare potenziali problemi di serializzazione, deserializzazione e rappresentazione dei dati.

Conclusioni

JSON è un formato versatile e ampiamente usato per lo scambio di dati nello sviluppo web moderno, e Python offre un set potente di strumenti per lavorare con dati JSON. Che tu stia costruendo un’API o lavorando con applicazioni web lato client, comprendere le basi di JSON in Python è una competenza essenziale per ogni sviluppatore moderno. Padroneggiando le tecniche illustrate in questo tutorial, sarai sulla buona strada per lavorare con dati JSON in Python e costruire applicazioni robuste e scalabili che sfruttano la potenza di questo formato di interscambio dati.

Se vuoi imparare a creare pipeline per importare dati conservati in formati comuni di archiviazione, dai un’occhiata al nostro corso Streamlined Data Ingestion with pandas. Userai pandas, una delle principali librerie Python per l’analisi, per ottenere dati da varie fonti, tra cui un foglio di calcolo di risposte a un sondaggio, un database di richieste di servizi pubblici e un’API di un popolare sito di recensioni. 

FAQs

Come posso gestire file JSON troppo grandi per entrare in memoria?

Per lavorare con file JSON di grandi dimensioni che non entrano in memoria, puoi elaborare i dati in modo incrementale usando la libreria ijson di Python oppure leggere il file riga per riga se il JSON è strutturato come una serie di oggetti più piccoli. Per esempio:

import ijson

with open('large_file.json', 'r') as file:
    for item in ijson.items(file, 'item'):
        print(item)  # Process each JSON item individually

Come faccio a unire due oggetti JSON in Python?

Puoi unire due oggetti JSON deserializzandoli prima in dizionari Python, quindi aggiornando un dizionario con il contenuto dell’altro:

import json

json1 = '{"name": "Alice", "age": 25}'
json2 = '{"city": "New York", "hobbies": ["reading", "cycling"]}'

dict1 = json.loads(json1)
dict2 = json.loads(json2)

dict1.update(dict2)
merged_json = json.dumps(dict1)

print(merged_json)
# Output: {"name": "Alice", "age": 25, "city": "New York", "hobbies": ["reading", "cycling"]}

I dati JSON possono includere commenti? Come posso gestirli in Python?

JSON non supporta nativamente i commenti, ma se stai lavorando con un file JSON non standard che include commenti (ad es. usando // o /* */), puoi pre-elaborare il file per rimuoverli prima del parsing. Ecco un esempio:

import json
import re

with open('file_with_comments.json', 'r') as file:
    content = file.read()

# Remove comments
content = re.sub(r'//.*?$|/\*.*?\*/', '', content, flags=re.DOTALL | re.MULTILINE)

data = json.loads(content)
print(data)

Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Data Scientist, fondatore e creatore di PyCaret

Argomenti

Approfondisci Python

Corso

Introduzione ai database in Python

4 h
101.2K
In questo corso imparerai le basi dei database relazionali e come usarli.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra altroMostra altro