メインコンテンツへスキップ

← ブログ一覧へ

JSON とは?構造とよくあるエラーを 5 分で理解する

JSON(JavaScript Object Notation)は、ウェブ上で最もよく使われるデータ交換形式です。API が返し、設定ファイルで使われ、ログにも溢れています。名前に「JavaScript」とありますが、実際には言語非依存で、Python・Go・Java などほぼすべての言語が読み書きできます。5 分で押さえましょう。

自分で走らせて見比べられます。 {"id":42,"tags":["draft","zh"],"meta":{"ok":true,"score":9.5},"note":null} を私たちの JSON フォーマッターに貼って「整形」を押してください。返ってくるのはスペース 2 つのインデント、キーは元の順序のまま、9.5 は数値のまま、nullnull のまま —— 並べ替えも型変換もしません。この入力と出力はビルドごとにスクリプトで逐字比較しているので、ツールの挙動が変わればこのページが誤りになり、すぐ分かります。

基本の構成要素

JSON は数種類の型だけで組み立てられます:

  • オブジェクト — 波括弧で囲んだキー/値の組:{ "name": "Ada", "age": 36 }
  • 配列 — 角括弧で囲んだ順序付きリスト:[1, 2, 3]
  • 文字列ダブルクォートのテキスト:"hello"
  • 数値423.14-7(クォートなし)
  • 真偽値true または false
  • null — 明示的な空の値

オブジェクトと配列は任意の深さで入れ子にでき、これで複雑なデータを表現します。

簡単な例

{
  "user": "ada",
  "active": true,
  "roles": ["admin", "editor"],
  "profile": { "age": 36, "city": "London" }
}

文字列・真偽値・文字列の配列・入れ子のオブジェクトを含む 1 つのオブジェクトです。

つまずきやすいルール

「無効な JSON」エラーの多くは、次の少数のミスから来ます:

  1. 末尾のカンマ。 [1, 2, 3,] は JavaScript では有効ですが JSON では無効です。最後の項目の後のカンマを消しましょう。
  2. シングルクォート。 JSON はキーも文字列値もダブルクォートが必須です。{'name': 'Ada'} は無効で、{"name": "Ada"} にします。
  3. クォートのないキー。 {name: "Ada"} は JavaScript のオブジェクトリテラルで、JSON ではありません。キーはクォート付き文字列にします。
  4. コメント。 JSON にコメント構文はありません。// このように は解析エラーになります。
  5. 値の型の誤り。 文字列にしたいのでなければ、数値と真偽値はクォートで囲まないでください。

規則は「どんなエラーを生むか」で覚えるほうが楽です。「ほぼ JSON」の 4 種類を私たちの JSON フォーマッターに入れ、返ってきたものをそのまま記録しました。末尾のカンマはこう:

✗ JSON syntax error: Expected double-quoted property name in JSON at position 7 (line 1 column 8) [L1:8]

シングルクォートはこう:

✗ JSON syntax error: Expected property name or '}' in JSON at position 1 (line 1 column 2) [L1:2]

引用符なしのキーはこう:

✗ JSON syntax error: Expected property name or '}' in JSON at position 1 (line 1 column 2) [L1:2]

JavaScript の undefined はこう:

✗ JSON syntax error: Unexpected token 'u', "{"a":undefined}" is not valid JSON

シングルクォートと引用符なしのキーが同じメッセージを同じ位置で出すことに注目してください。パーサーは引用符の種類を探しているのではなく、ダブルクォートで囲まれたプロパティ名を探し、最初に見つからない場所を報告しています。

壊れた JSON をすばやく直す

コードが解析エラーを出したら、最速の解決法はドキュメントをバリデーターに通すことです。JSON 整形ツールに貼り付けると、構文が誤っていればおおよその位置と理由を示します。正しくなったら「整形」で構造を見やすく、「圧縮」でネットワーク送信前に小さくできます。

これが壊れた JSON を直す最速の方法でもあります。散文ではなく位置を読むこと。✗ JSON syntax error: Expected double-quoted property name in JSON at position 7 (line 1 column 8) [L1:8] が指すのは 1 行 8 列 —— 最後のカンマの次の文字 —— なので、直すのはそのカンマ、報告より 1 つ手前です。パーサーが報告するのは諦めた場所で、間違えた場所ではありません。その 2 つが同じ文字であることはほとんどありません。

JSON を使うべきとき・そうでないとき

JSON は設定や API のペイロードに最適です。一方、非常に大きなデータセット(ストリーミングやバイナリ形式のほうが効率的)や、コメントが必要なドキュメント(YAML や TOML のほうが親切)にはやや不向きです。とはいえ大半のウェブ作業では JSON が共通言語であり、これであなたも流暢に読めるようになりました。

JSON を整えてみませんか?無料の JSON 整形ツールをお試しください。すべてブラウザ内で動作し、データは送信されません。