JSONとYAMLのNull表現

JSONとYAMLでnull値がどのように表現されるかを学びます。null、~、空の値をカバーし、形式間の正しい変換方法を解説します。

Data Types

詳細な説明

Null値は値が意図的に存在しないことを表します。JSONにはnullの単一の表現方法しかありませんが、YAMLは同じ概念を表現する複数の方法を提供しており、変換時に混乱を招くことがあります。

JSONのnull:

{
  "middleName": null,
  "nickname": null,
  "age": null
}

YAMLの等価表現(すべてnullを表す):

middleName: null
nickname: ~
age:

3つのYAML表現はすべて同じJSON null に変換されます。3つのスタイルは:

  1. null -- 明示的で、JSONの構文と一致。最も読みやすく曖昧さがない。
  2. ~(チルダ)-- YAMLのnull省略記法。Rubyエコシステムでよく使われる。
  3. 空の値 -- コロンの後に値がないとnullになる。最も簡潔だが最も明示的でない。

YAML 1.1でnullとして解析される追加の文字列:

a: Null
b: NULL
c: ~
d:

これらはすべてJSON出力で null になります。

空文字列 vs null -- 重要な区別:

# これはnull
value1:

# これは空文字列
value2: ""

# これはリテラル文字列 "null"
value3: "null"

JSONに変換すると:

{
  "value1": null,
  "value2": "",
  "value3": "null"
}

JSONからYAMLに変換する際null 値は3つのスタイルのいずれかでレンダリングできます。ほとんどのコンバーターは明確さのために明示的な null キーワードを使用します。YAMLからJSONに変換する際は、パーサーが空文字列とnull値を正しく区別していることを確認してください。これは設定ファイルでよくあるバグの原因です。

ベストプラクティス: YAMLでnullを意図する場合は常に明示的な null キーワードを使用し、nullに見える可能性のある文字列("null""~""")は常にクォートしましょう。

ユースケース

ユーザープロファイル設定でミドルネームや電話番号など一部のフィールドが意図的に値を持たない場合のオプショナルフィールド定義。nullがラウンドトリップ変換で正しく保持されることを確認します。

試してみる — JSON ↔ YAML Converter

フルツールを開く