JSON(JavaScript Object Notation)は、データをテキストで表現するための軽量なデータ交換フォーマットです。名前のとおり JavaScript のオブジェクト記法に由来しますが、いまでは特定の言語に依存しない標準(RFC 8259 / ECMA-404)として、Web API・設定ファイル・ログなど幅広く使われています。本記事では JSON のデータ型と構文ルール、つまずきやすいエラー、そして整形・検証のコツを実例とともに整理します。
1. JSONとは何か
JSON は、構造化されたデータを人にも機械にも読める文字列として表現する形式です。もともと JavaScript のオブジェクト記法をベースに考案されましたが、構文がシンプルで多くの言語に標準ライブラリが用意されているため、サーバとブラウザの通信(Web API)をはじめとするデータ交換のデファクトスタンダードになりました。
JSON の本体は単なるテキストです。ファイル拡張子は .json、HTTP では application/json という MIME タイプでやり取りされます。文字コードは UTF-8 を使うのが基本です。
2. JSONの6つのデータ型
JSON で表現できる値(value)は、次の6種類です。これらを入れ子にして任意の構造を作ります。
| データ型 | 説明 | 例 |
|---|---|---|
| オブジェクト | キーと値のペアの集合。波かっこ { } で囲む。キーは必ず文字列。 | {"name":"Taro","age":30} |
| 配列 | 値を順番に並べたもの。角かっこ [ ] で囲む。要素の型は混在可。 | [1,"a",true] |
| 文字列 | ダブルクオートで囲んだ文字の並び。\n や \" などのエスケープが使える。 | "hello" |
| 数値 | 整数・小数・指数表記。10進数のみ。先頭ゼロや + 符号は不可。 | 42 / -3.14 / 1e3 |
| 真偽値 | 論理値。すべて小文字で書く。 | true / false |
| null | 値が存在しないことを表す。小文字で null。 | null |
たとえば {"user":{"name":"Taro","tags":["admin",null],"active":true}} のように、オブジェクトと配列を組み合わせて階層的なデータを表せます。
3. 構文ルールの基本
JSON は許容される書き方が厳密に決まっています。とくに重要なのは次の点です。
- キーは必ずダブルクオートで囲んだ文字列:
{"name":"Taro"}は正しく、{name:"Taro"}は不正です。 - 文字列はダブルクオートのみ:シングルクオート
'...'は使えません。 - 末尾カンマは禁止:配列やオブジェクトの最後の要素のあとにカンマを置けません。
- コメントは書けない:
//や/* */は標準 JSON には存在しません。 - 数値は10進数のみ:16進数・先頭ゼロ・末尾ピリオド(
1.)・NaN・Infinityはすべて不可です。
これらは JavaScript のオブジェクトリテラルでは緩く許される書き方も多いため、混同しないよう注意してください。JSON はあくまで独立したデータ仕様です。
4. よくあるエラー
パースに失敗する代表的なパターンを表にまとめます。エラーに遭遇したら、まずこのあたりを疑ってください。
| 原因 | 不正な例 | 正しい書き方 |
|---|---|---|
| 末尾カンマ | {"a":1,"b":2,} | {"a":1,"b":2} |
| シングルクオート | {'a':'x'} | {"a":"x"} |
| キーが未クオート | {a:1} | {"a":1} |
| 全角スペース・全角記号 | {"a":1}(全角コロン) | {"a":1}(半角コロン) |
| BOM(先頭の不可視バイト) | ファイル先頭に U+FEFF | BOM なしの UTF-8 で保存 |
| NaN / Infinity | {"x":NaN} | {"x":null} 等で表現 |
| コメント混入 | {"a":1} // メモ | コメントを削除する |
5. 整形(Pretty)と最小化(Minify)
同じ JSON データでも、空白や改行の入れ方によって見た目が変わります。代表的な2つの処理が整形(Pretty Print)と最小化(Minify)です。
- 整形:インデントと改行を加えて階層を見やすくします。例:
{ "a": 1, "b": [2, 3] }を複数行に展開。レビュー・デバッグ・設定ファイルの保存に向きます。 - 最小化:意味に影響しない空白や改行をすべて取り除き、
{"a":1,"b":[2,3]}のように1行にします。サイズが小さくなるため、API レスポンスや通信・保存の効率化に向きます。
整形と最小化は見た目を変えるだけで、表すデータの意味は同一です。人が読むときは整形、機械が転送・保存するときは最小化、と用途で切り替えれば問題ありません。
6. バリデーション(検証)の考え方
JSON の検証には、段階の異なる2つの観点があります。
- 構文の検証:そもそも JSON として正しくパースできるか。末尾カンマや未クオートのキーなど、本記事の第4章で挙げたエラーがないかを確認します。
- スキーマの検証:パースできることに加えて、期待した構造・型になっているかを確認します。たとえば「
ageは数値で必須」「tagsは文字列の配列」といった制約を JSON Schema などで定義して検査します。
まずは構文が正しいかをツールで確認し、業務データとして使うならスキーマ検証まで行うと安全です。手元で素早く確認したいときは、下記のオンラインツールが便利です。
Free Tool JSON整形・検証ツールで確かめる 貼り付けるだけで JSON を整形(Pretty)/最小化(Minify)し、構文エラーの箇所を表示します。ブラウザ内で完結し、データは送信されません。よくある質問(FAQ)
JSONでコメントは書けますか?
標準のJSON(RFC 8259)にはコメントの構文がありません。// や /* */ を書くとパースエラーになります。設定ファイルなどでコメントを使いたい場合は、JSON5 や JSONC といった拡張仕様、または別フィールドに説明文字列を持たせる方法を検討してください。データ交換用にはコメントを含めないのが原則です。
末尾カンマがエラーになるのはなぜですか?
JSONの文法では、配列やオブジェクトの最後の要素のあとにカンマを置くことが許されていないためです。{"a":1,} や [1,2,] は不正です。JavaScriptのオブジェクトリテラルでは末尾カンマが許されるため混同しがちですが、JSONは別仕様なので末尾のカンマは必ず削除してください。
整形(Pretty)と最小化(Minify)はどう使い分けますか?
整形はインデントと改行を加えて人が読みやすくする処理で、レビューやデバッグ、設定ファイルの保存に向きます。最小化は空白や改行を取り除いてサイズを最小にする処理で、APIのレスポンスや通信・保存の効率化に向きます。どちらも表すデータの意味は同じなので、用途に応じて切り替えれば問題ありません。