JSON Toolkit

null, nebo pole vynechat

Shrnutí: `null` říká, že pole existuje bez hodnoty; vynechání říká, že pole neexistuje. Těla PATCH, slučování konfigurace a předvyplnění formulářů jsou místa, kde rozdíl kouše.

Středně pokročilý~3 min čteníPublikováno 2026-10-30Aktualizováno 2026-10-30
Sémantický rozdíl mezi null a chybějícím polem

Stručně: posílejte null, když konzument musí rozlišit „vymazáno“ od „nedotčeno“ – v těle PATCH nepřítomnost pole nechá být a explicitní null ho vymaže – a držte jednu konvenci pro každé pole, aby odpovědi i slučování konfigurace zůstaly stabilní.

Rozdíl

{ "nickname": null }

Přítomné, prázdné. Konzument ví, že pole bylo explicitně vymazáno.

{ }

Nepřítomné. Konzument nedokáže rozlišit „nikdy nastaveno“ od „nepodporováno“.

V JavaScriptu je rozdíl konkrétní:

'nickname' in obj          // false — nepřítomné
obj.nickname === null      // true  — přítomné a null
obj.nickname === undefined // true  — oba případy

Kde na tom záleží

Těla PATCH. {"nickname": null} vymaže přezdívku. {} nezmění nic. Pokud handler považuje „null“ a „chybějící“ za totéž, uživatelé pole nikdy nemohou vymazat – mohou jen nastavit prázdný řetězec, což je něco jiného.

Implementujte podle přítomnosti klíče, nikoli hodnoty:

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

Slučování konfigurace. Vynechání zdědí výchozí hodnotu; null ji explicitně vypne. Přesně tak se chovají hodnoty v Helm a Kubernetes.

Předvyplnění formuláře. null se vykreslí jako prázdné a chybějící pole také, ale odeslání se liší: mělo hodnotu, teď vymazáno → pošli null; nikdy nevyplněno → vynechej. Bez rozlišení vypadá vymazání stejně jako nedotčení.

Konvence

Situace Konvence
Těla odpovědí Ponechte null; stabilní tvar, jednodušší typy
Požadavky PATCH null vymaže, vynechání zachová
PUT (plná náhrada) Vynechání znamená smazat – celý dokument se nahradí
Slučování konfigurace Vynechání = výchozí, null = vypnuto
Databáze null pro neznámé nebo neplatné; '' pro známé-prázdné

Držte tvary odpovědí stabilní. Seznam, kde některé položky nesou avatar a jiné ne, nutí kontroly 'avatar' in item na každém volajícím místě. avatar: null se konzumuje snadněji.

Tři věci, které nedělat

Nepoužívejte "" jako null. Prázdná přezdívka a nenastavená přezdívka jsou ve většině domén různé stavy.

Nepoužívejte 0 nebo -1 jako sentinely. Nula je legitimní číslo a sentinel zkazí každý průměr, který spočítáte.

Nemíchejte konvence mezi endpoinpty. Dvě konvence znamenají dvě větve kódu v každém klientovi.

Časté dotazy

Co rozhoduje mezi null a vynechaným polem?

Zeptejte se, zda konzument potřebuje rozlišit „explicitně vymazáno“ od „nikdy nastaveno“. V těle PATCH musí, takže null vymaže a nepřítomnost zachová; v odpovědích ponechání null činí tvar stabilní a typy klienta jednodušší.

Jak endpoint PATCH rozliší vymazání od ponechání být?

Kontrolujte přítomnost klíče, nikoli hodnotu: Object.hasOwn(patch, 'nickname') vám řekne, že pole bylo odesláno, a teprve potom ho přiřaďte, včetně null. Pokud handler považuje null a chybějící za totéž, uživatelé pole nikdy nemohou vymazat a mohou se uchýlit jen k prázdnému řetězci.

Proč mají těla odpovědí ponechat null?

Stabilní tvar znamená, že klienti nepotřebují kontrolu 'avatar' in item pro každý volitelný klíč. Když některé položky seznamu nesou avatar a jiné ho vynechávají, tato kontrola se duplikuje na každém volajícím místě a snadno se pokazí.

Další čtení