JSONデータ型の解説

JSONの6つのデータ型(string、number、boolean、null、object、array)を学びましょう。構文ルール、制約、プログラミング言語へのマッピングを解説します。

Concept

詳細な説明

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進数、InfinityNaN、先頭のプラス記号をサポートしません。有効な例: 42-3.142.5e10。無効な例: 0x1F+5.50.5 と書く必要あり)、NaN

Boolean: true または false の2つのリテラル値のいずれか(小文字のみ)。TrueTRUEFalseFALSE はすべて無効です。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で undefinedDate オブジェクト、正規表現、関数を使用しようとすることがあります。これらはいずれも有効なJSON型ではありません。日付はISO 8601文字列またはUnixタイムスタンプとしてシリアライズする必要があります。もうひとつのミスは、クォートなしの文字列値を使用したり、暗黙の型変換に依存したりすることです。JSONでは、42 はnumberであり、"42" はstringです。自動変換はありません。

ベストプラクティス:

データモデルでは型を明示的にしてください。フィールドがnumber表現かstring表現かを文書化しましょう。欠損値の表現には、空文字列や -1 などのセンチネル値ではなく、一貫して null を使用してください。JSONスキーマを設計する際は、データを正確に表現する最もシンプルな型を選択しましょう。

ユースケース

JSON APIレスポンススキーマを設計し、各フィールドに適切なJSONデータ型を選択する。例えば、タイムスタンプにはnumber、識別子にはstringを使用する。

試してみる — JSON Formatter

フルツールを開く