JSON Toolkit

null o omettere il campo

In sintesi: `null` dice che il campo esiste senza valore; ometterlo dice che il campo non esiste. I corpi PATCH, il merge di configurazione e il precompilamento dei form sono i punti in cui la differenza morde.

Intermedio~3 min di letturaPubblicato il 2026-10-30Aggiornato il 2026-10-30
La differenza semantica tra null e un campo assente

In sintesi: invia null quando il consumatore deve distinguere "svuotato" da "non toccato" — in un corpo PATCH, l'omissione lascia il campo com'è e un null esplicito lo svuota — e mantieni una sola convenzione per campo così risposte e merge di configurazione restano stabili.

La differenza

{ "nickname": null }

Presente, vuoto. Il consumatore sa che il campo è stato esplicitamente svuotato.

{ }

Assente. Il consumatore non può distinguere "mai impostato" da "non supportato".

In JavaScript la distinzione è concreta:

'nickname' in obj          // false — absent
obj.nickname === null      // true  — present and null
obj.nickname === undefined // true  — both cases

Dove conta

Corpi PATCH. {"nickname": null} svuota il nickname. {} non cambia nulla. Se il handler tratta "null" e "mancante" allo stesso modo, gli utenti non possono mai svuotare il campo — possono solo impostare una stringa vuota, che è una cosa diversa.

Implementa in base alla presenza della chiave, non al valore:

if (Object.hasOwn(patch, 'nickname')) {
  target.nickname = patch.nickname;   // null allowed
}

Merge di configurazione. L'omissione eredita il default; null lo disattiva esplicitamente. È esattamente come si comportano i valori di Helm e Kubernetes.

Precompilamento dei form. Un null viene renderizzato come vuoto e anche un campo mancante, ma l'invio differisce: aveva un valore, ora svuotato → invia null; mai compilato → ometti. Senza la distinzione, svuotare sembra identico a non aver toccato.

Convenzioni

Situazione Convenzione
Corpi di risposta Mantieni null; forma stabile, tipi più semplici
Richieste PATCH null svuota, l'omissione conserva
PUT (sostituzione completa) L'omissione significa eliminare — l'intero documento viene sostituito
Merge di configurazione Omissione = default, null = disattivato
Database null per sconosciuto o non applicabile; '' per vuoto noto

Mantieni stabili le forme delle risposte. Una lista in cui alcuni elementi portano avatar e altri no costringe a controlli 'avatar' in item in ogni punto di chiamata. avatar: null è più facile da consumare.

Tre cose da non fare

Non usare "" per null. Un nickname vuoto e un nickname non impostato sono stati diversi nella maggior parte dei domini.

Non usare 0 o -1 come sentinelle. Zero è un numero legittimo, e la sentinella corrompe ogni media che calcoli.

Non mescolare convenzioni per endpoint. Due convenzioni significano due percorsi di codice in ogni client.

FAQ

Cosa decide tra null e un campo omesso?

Chiediti se il consumatore deve distinguere "esplicitamente svuotato" da "mai impostato". In un corpo PATCH deve, quindi null svuota e l'assenza conserva; nelle risposte, mantenere null rende la forma stabile e i tipi del client più semplici.

Come fa un endpoint PATCH a distinguere lo svuotamento dal lasciare com'è?

Controlla la presenza della chiave, non il valore: Object.hasOwn(patch, 'nickname') ti dice che il campo è stato inviato, e solo allora assegnalo, null incluso. Se il handler tratta null e mancante allo stesso modo, gli utenti non possono mai svuotare il campo e possono solo ripiegare su una stringa vuota.

Perché i corpi di risposta dovrebbero mantenere null?

Una forma stabile significa che i client non hanno bisogno di un controllo 'avatar' in item per ogni chiave opzionale. Quando alcuni elementi della lista portano avatar e altri lo omettono, quel controllo viene duplicato in ogni punto di chiamata ed è facile da sbagliare.

Ulteriori letture

Strumenti correlati

Articoli correlati

Punti chiave per progettare contratti di dati API JSON

Sei cose sono molto difficili da cambiare una volta rilasciate: envelope delle risposte, formati degli errori, forma della paginazione, rappresentazione di ID e tempo, semantica di null versus assenza, ed evoluzione delle versioni.

Intermedio~13 min di letturaAggiornato il 2026-10-30

JSON Pointer, Patch e Merge Patch

Tre specifiche brevi formano un protocollo di cambiamento: Pointer localizza, Patch modifica con precisione, Merge Patch unisce parzialmente. Scegliere male danneggia array e concorrenza.

Intermedio~12 min di letturaAggiornato il 2026-10-30

FAQ sull'uso degli strumenti: dati, file ed esportazione

I dati vengono caricati, quanto grande può essere un file, qualcosa viene memorizzato localmente, perché il cinese diventa escape: dieci domande che esplicitano i confini reali di uno strumento JSON online.

Principiante~10 min di letturaAggiornato il 2026-10-30