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つのスタイルは:
null-- 明示的で、JSONの構文と一致。最も読みやすく曖昧さがない。~(チルダ)-- YAMLのnull省略記法。Rubyエコシステムでよく使われる。- 空の値 -- コロンの後に値がないと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がラウンドトリップ変換で正しく保持されることを確認します。