Il formato JSON (JavaScript Object Notation) si è affermato come il linguaggio universale per lo scambio di dati sul web. Quasi tutte le API REST, i file di configurazione e le pipeline di dati si affidano a JSON. Nonostante la sua intrinseca semplicità, esistono innumerevoli modi per scrivere JSON: alcuni impeccabili, altri decisamente meno. Questa guida esplora le pratiche JSON più significative, pensate per rendere le tue API più pulite, il codice più gestibile e i tuoi sistemi complessivamente più performanti.

1. Adotta Convenzioni di Naming Coerenti

La principale fonte di confusione nelle API JSON deriva spesso da nomenclature di chiavi non uniformi. La soluzione? Scegli uno stile e mantienilo rigorosamente in tutta la tua API:

  • camelCase (es. nomeUtente, idProdotto) — La scelta prediletta in JavaScript e nella maggior parte delle API web (tra cui quelle di Google, Stripe e GitHub).
  • snake_case (es. nome_utente, id_prodotto) — Comune nelle API scritte in Python e Ruby, nonché in molti sistemi basati su database.
  • kebab-case (es. nome-utente) — Raramente utilizzato in JSON, poiché i trattini richiedono chiavi quotate in JavaScript, complicando l'interoperabilità.

Qualunque sia la tua scelta, applicala in modo sistematico. Mescolare id_utente e userId nella stessa API è una delle incongruenze più frustranti per chi utilizza il tuo servizio.

2. Utilizza Sempre le Doppie Virgolette per Chiavi e Valori Stringa

La specifica JSON (RFC 8259) impone che chiavi e valori stringa siano racchiusi tra doppie virgolette. Le virgolette singole non sono ammesse in JSON valido. Questo è un errore comune quando si convertono oggetti letterali JavaScript in JSON, dato che JavaScript stesso permette le virgolette singole.

❌ JSON Non Valido
{'nome': 'Pan Tool', 'gratuito': true}
✅ JSON Valido
{"nome": "Pan Tool", "gratuito": true}

3. Impiega Tipi di Dati Appropriati

JSON supporta sei tipi di dati fondamentali: stringa, numero, booleano, null, array e oggetto. Sfrutta il tipo che meglio si allinea semanticamente ai dati; evitare di usare stringhe per ogni cosa è cruciale.

  • Utilizza i valori booleani true/false, non le stringhe "true"/"false" o i numeri 1/0 per rappresentare valori booleani.
  • Scegli null per indicare l'assenza intenzionale di un valore. Evita stringhe vuote "" o 0 per rappresentare "nessun valore".
  • Usa i numeri per quantità numeriche, non stringhe come "42".
  • Impiega gli array per collezioni ordinate dello stesso tipo di elemento.
  • Per le date, adotta le stringhe in formato ISO 8601: "2025-04-15T10:30:00Z". JSON non possiede un tipo di dato nativo per le date.

4. Struttura un "Envelope" di Risposta Coerente

Per le API REST, è buona norma racchiudere sempre le risposte in una struttura "envelope" standardizzata. Questo rende la gestione degli errori prevedibile per gli utilizzatori dell'API:

Envelope di Risposta API Consigliato
{
  "success": true,
  "data": {
    "id": 42,
    "nome": "Pan Tool"
  },
  "meta": {
    "total": 1,
    "page": 1
  }
}

// In caso di errore:
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "La risorsa richiesta non è stata trovata."
  }
}

Un envelope coerente permette ai consumatori della tua API di sviluppare una singola utility di gestione delle risposte, anziché dover affrontare forme di risposta diverse per ogni singolo endpoint.

5. Valida Sempre il JSON Prima dell'Elaborazione

Non dare mai per scontato che il JSON in arrivo sia valido. Prima di procedere all'elaborazione, verifica sempre sia la sintassi (è JSON valido?) sia la struttura (contiene i campi attesi?).

  • In PHP, dopo aver chiamato json_decode(), controlla che json_last_error() sia uguale a JSON_ERROR_NONE.
  • In JavaScript/Node.js, racchiudi JSON.parse() in un blocco try/catch.
  • Utilizza librerie di validazione JSON Schema per convalidare in modo sistematico struttura, tipi e campi obbligatori.

6. Minifica JSON per la Produzione, Formatta per lo Sviluppo

Durante la fase di sviluppo e per i file di configurazione versionati, utilizza JSON formattato con indentazione per una migliore leggibilità. Nelle risposte delle API in produzione, invece, servi JSON minificato per ridurre le dimensioni del payload.

Un file di configurazione JSON ben formattato di 500 righe potrebbe occupare 20KB. La sua versione minificata potrebbe ridursi a 12KB: una diminuzione del 40%. Se servito tramite HTTPS con compressione GZIP, il JSON minificato si comprime ancora meglio di quello formattato.

Utilizza il nostro Minificatore JSON gratuito per comprimere il JSON destinato alla produzione e il nostro Formatter JSON per espandere il JSON minificato a scopo di lettura e modifica.

7. Evita Strutture Eccessivamente Annidate

Il JSON profondamente annidato è difficile da leggere, complicato da interrogare e spesso indice di un modello dati non ottimale. Come regola generale, cerca di mantenere la profondità del tuo JSON entro i 3-4 livelli al massimo. Se ti ritrovi ad annidare oggetti per 6 o 7 livelli, è quasi sempre un segnale che devi ripensare il tuo modello dati.

❌ Annidamento Eccessivo
{
  "utente": {
    "profilo": {
      "indirizzo": {
        "fatturazione": {
          "paese": { "codice": "IT" }
        }
      }
    }
  }
}
✅ Struttura più Piatta
{
  "id_utente": 42,
  "codice_paese_fatturazione": "IT"
}

8. Gestisci i Numeri Grandi con Attenzione

La funzione JSON.parse() di JavaScript utilizza numeri in virgola mobile a doppia precisione IEEE 754 per tutti i numeri. Questo formato può rappresentare in modo sicuro solo interi fino a 2^53 - 1 (9.007.199.254.740.991). ID e timestamp superiori a questo valore perdono precisione quando vengono parsati in JavaScript.

La soluzione: per ID interi di grandi dimensioni (come gli ID snowflake di Twitter), restituisci sia una rappresentazione numerica sia una stringa: "id": 944985814402506752, "id_str": "944985814402506752". Gli utilizzatori che necessitano della massima precisione possono servirsi della stringa.

9. Usa null per i Campi Opzionali Mancanti

Quando un campo è presente nello schema ma non ha un valore per una specifica risorsa, includilo esplicitamente come null anziché ometterlo. L'omissione dei campi rende più difficile distinguere tra "questo campo non esiste nello schema" e "questo campo esiste ma non ha valore". La presenza costante dei campi rende le risposte delle API più prevedibili.

10. Versiona la Tua API

Man mano che la tua API evolve, dovrai apportare modifiche potenzialmente incompatibili alla sua struttura JSON. Pianifica questa eventualità fin dal primo giorno versionando la tua API. Puoi farlo tramite il percorso dell'URL (es. /api/v1/utenti), un parametro di query (es. ?version=2) o un header Accept (es. Accept: application/vnd.tuarapp.v2+json).

Lavora con JSON Più Velocemente

Utilizza i nostri strumenti JSON gratuiti per minificare, formattare e validare JSON in pochi secondi.