JSON Toolkit

null かフィールド省略か

要点:`null` はフィールドが存在し値がないことを示し、省略はフィールドが存在しないことを示します。PATCH ボディ、設定マージ、フォームの初期表示で差が牙をむきます。

中級約 3 分で読めます2026-10-30 公開2026-10-30 更新
null と欠落フィールドの意味論的違い

要点:消費者が「クリア」と「未変更」を区別しなければならないときは null を送りましょう。PATCH ボディでは、欠落はフィールドをそのままにし、明示的な null はクリアします。フィールドごとに一つの取り決めを保ち、レスポンスと設定マージを安定させます。

違い

{ "nickname": null }

存在し、空です。消費者はフィールドが明示的にクリアされたことを知ります。

{ }

欠落。消費者は「一度も設定されていない」と「対応していない」を区別できません。

JavaScript では区別が具体的です。

'nickname' in obj          // false — 欠落
obj.nickname === null      // true  — 存在し null
obj.nickname === undefined // true  — 両方のケース

どこで重要か

PATCH ボディ。 {"nickname": null} はニックネームをクリアします。{} は何も変えません。ハンドラが「null」と「欠落」を同じに扱うと、ユーザーはフィールドを決してクリアできず、空文字列に設定するしかなくなります。それは別物です。

キーの存在で実装し、値では判断しません。

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

設定マージ。 省略は既定値を継承し、null は明示的に無効化します。これは Helm と Kubernetes の values がまさにそう振る舞う方法です。

フォームの初期表示。 null は空として描画され、欠落フィールドも同様ですが、送信が異なります。値があり、今クリアされた → null を送る。一度も入力されていない → 省略。区別がなければ、クリアは触っていないのと同じに見えます。

取り決め

状況 取り決め
レスポンスボディ null を保つ。安定した形、単純な型
PATCH リクエスト null はクリア、省略は保持
PUT(完全置換) 省略は削除を意味する。文書全体が置き換えられる
設定マージ 省略 = 既定、null = 無効
データベース 不明か該当なしは null、既知の空は ''

レスポンスの形を安定させる。 一部の項目が avatar を運び他が運ばないリストは、すべての呼び出し箇所で 'avatar' in item のチェックを強います。avatar: null の方が消費しやすいです。

やってはいけない三つ

null に "" を使わない。 空のニックネームと未設定のニックネームは、ほとんどの領域で異なる状態です。

番兵に 0 や -1 を使わない。 ゼロは正当な数値で、番兵は計算するすべての平均を壊します。

エンドポイントごとに取り決めを混ぜない。 二つの取り決めは、すべてのクライアントに二つのコード経路を意味します。

FAQ

null とフィールド省略は何で決まりますか?

消費者が「明示的にクリア」と「一度も設定されていない」を区別する必要があるかを問います。PATCH ボディでは必要なので、null はクリアし、欠落は保持します。レスポンスでは null を保つことで形が安定し、クライアントの型が単純になります。

PATCH エンドポイントはクリアとそのままをどう区別しますか?

値ではなくキーの存在を確認します。Object.hasOwn(patch, 'nickname') はフィールドが送られたことを示し、そのときだけ代入します。null も含みます。ハンドラが null と欠落を同じに扱うと、ユーザーはフィールドを決してクリアできず、空文字列に頼るしかありません。

レスポンスボディが null を保つべきなのはなぜですか?

安定した形なら、クライアントは任意のキーごとに 'avatar' in item をチェックする必要がありません。一部のリスト項目が avatar を運び他が省略すると、そのチェックがすべての呼び出し箇所で重複し、誤りやすくなります。

さらに読む

対応ツール

関連記事

JSON API データ契約設計の要点

出荷後に変えるのが非常に難しい六つ。レスポンスエンベロープ、エラー形式、ページネーションの形、ID と時刻の表現、null と欠落の意味論、バージョン進化です。

中級約 13 分で読めます2026-10-30 更新

JSON Pointer、Patch、Merge Patch

三つの短い仕様が変更プロトコルを構成します。Pointer は位置を特定し、Patch は正確に編集し、Merge Patch は部分的にマージします。選択を誤ると配列と並行性で痛みます。

中級約 12 分で読めます2026-10-30 更新

ツール利用 FAQ:データ、ファイル、エクスポート

データはアップロードされるのか、どれくらいのファイルが動くのか、何かローカルに保存されるのか、なぜ日本語がエスケープになるのか。オンライン JSON ツールの実際の境界を十の質問で明示します。

初級約 10 分で読めます2026-10-30 更新