JSONデータ型の解説
JSONの6つのデータ型(string、number、boolean、null、object、array)を学びましょう。構文ルール、制約、プログラミング言語へのマッピングを解説します。
詳細な説明
JSONは正確に6つのデータ型をサポートしており、2つのカテゴリに分かれています。4つのプリミティブ型(string、number、boolean、null)と2つの構造化型(object、array)です。すべての有効なJSON値は、これらの型のいずれかでなければなりません。日付、バイナリデータ、undefined、カスタム型のための追加の型はありません。
String:
ダブルクォートで囲まれたゼロ個以上のUnicode文字のシーケンスです。シングルクォートは許可されていません。文字列は \n、\t、\uXXXX などのエスケープシーケンスをサポートします。例: "Hello, world!"。
Number:
整数または浮動小数点の数値です。JSONの数値は先頭のゼロ(0 自体を除く)、16進数、8進数、Infinity、NaN、先頭のプラス記号をサポートしません。有効な例: 42、-3.14、2.5e10。無効な例: 0x1F、+5、.5(0.5 と書く必要あり)、NaN。
Boolean:
true または false の2つのリテラル値のいずれか(小文字のみ)。True、TRUE、False、FALSE はすべて無効です。booleanはクォートで囲みません。"true" はbooleanではなくstringです。
Null:
リテラル値 null(常に小文字)は、値の意図的な不在を表します。空文字列 ""、数値 0、boolean false とは異なります。JSONには undefined 型がありません。値が存在しない場合は、undefined を設定するのではなく、キーを完全に省略してください。
Object:
波括弧 {} で囲まれた、順序のないkey-valueペアのコレクションです。キーはダブルクォートされた文字列でなければなりません。値はネストされたobjectを含む任意のJSON型が可能です。例: {"name": "Alice", "age": 30}。重複キーは仕様上は技術的に許可されていますが、パーサーによって動作が異なるため強く非推奨です。
Array:
角括弧 [] で囲まれた、順序付きの値のシーケンスです。要素は任意のJSON型が可能で、同じarray内で異なる型を混在させることもできます。例: [1, "two", true, null]。
開発者がよくやるミス:
JavaScriptから来た開発者は、JSONで undefined、Date オブジェクト、正規表現、関数を使用しようとすることがあります。これらはいずれも有効なJSON型ではありません。日付はISO 8601文字列またはUnixタイムスタンプとしてシリアライズする必要があります。もうひとつのミスは、クォートなしの文字列値を使用したり、暗黙の型変換に依存したりすることです。JSONでは、42 はnumberであり、"42" はstringです。自動変換はありません。
ベストプラクティス:
データモデルでは型を明示的にしてください。フィールドがnumber表現かstring表現かを文書化しましょう。欠損値の表現には、空文字列や -1 などのセンチネル値ではなく、一貫して null を使用してください。JSONスキーマを設計する際は、データを正確に表現する最もシンプルな型を選択しましょう。
ユースケース
JSON APIレスポンススキーマを設計し、各フィールドに適切なJSONデータ型を選択する。例えば、タイムスタンプにはnumber、識別子にはstringを使用する。