JSONの書き方ガイド:データ型とネスト構造をコード例で理解する
JSONの正しい書き方をデータ型ごとにコード例付きで解説。文字列・数値・真偽値・null・配列・オブジェクトの記法とネスト構造の作り方を学べます。

はじめに
JSON はシンプルな形式ですが、書き方のルールを正確に知っておかないと、パースエラーで思わぬ時間を取られることがあります。このガイドでは、JSON で使える6つのデータ型の書き方をコード例とともに整理します。
JSON そのものの概要については JSONとは で解説しているので、まだ読んでいない方はそちらから読むとスムーズです。
文字列(String)
文字列はダブルクォート " で囲みます。シングルクォート ' は JSON では使えません。
{
"greeting": "こんにちは",
"empty": ""
}
エスケープシーケンス
文字列内で特殊な文字を使う場合はバックスラッシュでエスケープします。
| 記法 | 意味 |
|---|---|
\" |
ダブルクォート |
\\ |
バックスラッシュ |
\n |
改行 |
\t |
タブ |
\uXXXX |
Unicode コードポイント |
{
"path": "C:\\Users\\Documents",
"message": "1行目\n2行目",
"quote": "彼は\"天才\"と呼ばれた"
}
エスケープ忘れは構文エラーの原因になりやすいポイントです。特にファイルパスの \ はよく引っかかります。
数値(Number)
数値はクォートで囲まずそのまま書きます。整数、小数、負の数、指数表記が使えます。
{
"integer": 42,
"negative": -10,
"decimal": 3.14,
"exponent": 1.5e3
}
1.5e3 は 1500 を意味します。科学技術計算のデータを扱う場面で見かけることがあります。
注意点として、JSON では先頭にゼロを付けた数値(007 など)や、NaN、Infinity は使えません。これらを書くとパースエラーになります。
// これらはすべて無効
007
NaN
Infinity
(なお、JSON にコメント構文はありません。上の // は説明のために書いています。)
真偽値(Boolean)
true と false の2値です。すべて小文字で書きます。
{
"isActive": true,
"isDeleted": false
}
True、FALSE、yes、no はいずれも JSON では真偽値として認識されません。YAML からの変換時にありがちなミスです。
null
値が存在しないことを表す null です。こちらもすべて小文字です。
{
"middleName": null,
"deletedAt": null
}
空文字列 "" と null は意味が異なります。「値はあるが中身が空」なのか「値そのものがない」のかを区別したい場面で null を使います。
配列(Array)
角括弧 [] で囲み、要素をカンマで区切ります。
{
"colors": ["red", "green", "blue"],
"scores": [85, 92, 78],
"flags": [true, false, true]
}
空の配列も有効です。
{
"items": []
}
配列には異なる型の値を混在させることも文法上は可能です。
["text", 42, true, null]
ただし、実務ではひとつの配列に入れる要素の型は統一するのが通例です。型が混在していると、受け取った側でデータの処理が複雑になります。
オブジェクト(Object)
波括弧 {} で囲み、キーと値のペアをカンマで区切ります。キーは必ずダブルクォートで囲んだ文字列です。
{
"id": 1,
"name": "商品A",
"price": 1500
}
空のオブジェクトも有効です。
{
"metadata": {}
}
キーの重複は仕様上禁止されていませんが、多くのパーサーでは後から出現した値で上書きされます。予期しない動作の原因になるので、重複は避けてください。
ネスト構造
JSON の表現力を支えているのがネスト(入れ子)です。オブジェクトの中にオブジェクトを入れたり、配列の中にオブジェクトを入れたりできます。
オブジェクトの中にオブジェクト
{
"user": {
"name": "田中太郎",
"contact": {
"email": "tanaka@example.com",
"phone": "090-1234-5678"
}
}
}
配列の中にオブジェクト
API のレスポンスでもっとも頻繁に見かけるパターンです。
{
"users": [
{
"id": 1,
"name": "田中太郎",
"role": "admin"
},
{
"id": 2,
"name": "佐藤花子",
"role": "editor"
}
]
}
オブジェクトの中に配列
{
"order": {
"id": "A-001",
"items": [
{ "product": "ノートPC", "quantity": 1 },
{ "product": "マウス", "quantity": 2 }
],
"tags": ["urgent", "international"]
}
}
ネストが深くなりすぎると可読性が下がります。一般的には3〜4階層を超えたらデータ構造を見直すことを検討してもよいでしょう。
JSON のトップレベル
JSON のトップレベルに来られるのはオブジェクト {} または配列 [] です。RFC 8259 では文字列や数値などのプリミティブ値もトップレベルとして有効とされていますが、実務で見かけるのはほぼオブジェクトか配列です。
{
"status": "ok"
}
[1, 2, 3]
整形と検証
手書きで JSON を作成したら、構文チェックを通しておくと安心です。カンマの過不足やクォートの閉じ忘れは、目視では見つけにくいものです。
JSON Formatter に貼り付ければ、整形と構文検証を同時に行えます。エラーがあればどこが問題なのかも表示されるので、修正もスムーズです。
よくある構文エラーのパターンと対処法は JSON Parse Errorの解決方法 で詳しく取り上げています。JSON を見やすく整形するためのヒントは JSON整形の基本 も参考になります。
まとめ
- 文字列はダブルクォート必須。シングルクォートは不可
- 数値はクォートなしで記述。先頭ゼロや
NaNは使えない - 真偽値は小文字の
true/falseのみ nullで「値がない」を明示する- 配列
[]は同じ型の要素で揃えるのが実務の慣例 - オブジェクト
{}のキーはダブルクォート付き文字列 - ネストで複雑なデータ構造を表現できるが、深すぎないよう注意
- 書き終えたら JSON Formatter で構文チェックするのがおすすめ