📋
← ガイド一覧に戻る

JSONとは何か?初心者のための完全ガイド

· タグ: json, what-is-json, json-syntax, json-data-types, web-development

JSONとは何か?

JSON(JavaScript Object Notation)は、人間が読み書きしやすく、機械がパースし生成しやすいように設計された、軽量でテキストベースのデータ交換フォーマットです。元々はJavaScriptのオブジェクトリテラル構文から派生しましたが、その後、実質的にあらゆるプログラミング言語でサポートされる言語に依存しない標準となりました。

今日、JSONはWeb上でのデータ交換における支配的なフォーマットです。REST API、設定ファイル、NoSQLデータベース、モバイルアプリの通信、その他数え切れないほどのデータ駆動型システムを支えています。そのシンプルさと遍在性により、世界中の開発者にとってのデフォルトの選択肢となっています。

JSONの構文規則

JSONは厳格で最小限の構文規則に従います:

  • データはキー/値ペアで構造化される
  • すべてのキーは二重引用符で囲まれた文字列でなければならない(一重引用符は許可されない)
  • キー/値ペアはコロン(:)で区切られる
  • ペアはカンマ(,)で区切られる
  • 波括弧{}はオブジェクトを囲む
  • 角括弧[]は配列を囲む
  • 末尾のカンマは許可されない
  • 厳格なJSONではコメントは許可されない

有効なJSONの例

{
  "name": "Jane Smith",
  "age": 28,
  "isEmployed": true,
  "skills": ["JavaScript", "Python", "SQL"],
  "address": {
    "street": "123 Main Street",
    "city": "San Francisco",
    "zipCode": "94102"
  },
  "phoneNumbers": null
}

無効なJSONの例

末尾のカンマ(無効):

{
  "name": "Jane",
  "age": 28,
}

一重引用符のキー(無効):

{ 'name': 'Jane' }

引用符のないキー(無効):

{ name: "Jane" }

JSONのデータ型

JSONは正確に6つのデータ型をサポートします:

| 型 | 説明 | 例 | |------|-------------|---------| | 文字列 | 二重引用符で囲まれたUnicodeテキスト | "Hello, world!" | | 数値 | 整数または浮動小数点数 | 423.14-71.5e10 | | ブール値 | 論理的なtrueまたはfalse | truefalse | | Null | 意図的な空の値 | null | | オブジェクト | 順序のないキー/値の集合 | {"key": "value"} | | 配列 | 順序付きの値のリスト | [1, 2, 3] |

注目すべき点として、日付、タイムスタンプ、バイナリデータ、undefined、関数にはJSONのネイティブ表現がありません。日付は通常、慣例によりISO 8601文字列として格納されます。

JSONと他のデータフォーマット

JSONは、それぞれにトレードオフがあるいくつかの他のデータ交換フォーマットと並んで存在します:

  • JSONとXMLの比較:JSONはより簡潔で、パースが高速です。XMLは属性、名前空間、スキーマ(XSD)をサポートしますが、かなり冗長です。
  • JSONとYAMLの比較:YAMLはコメントをサポートする設定ファイルに対してより人間が読みやすいですが、インデントに敏感な構文はエラーを引き起こしやすいです。JSONはより移植性が高く、検証が厳格です。
  • JSONとCSVの比較:CSVはフラットで表形式のみです。JSONはネストされた階層と混在データ型をサポートします。
  • JSONとProtocol Buffersの比較:Protobufはマシン間通信ではより小さく高速ですが、スキーマ定義が必要で、人間が読むことはできません。

なぜJSONがWeb APIを支配するのか

JSONがWeb API設計で支配的である理由はいくつかの要因があります:

  1. 言語の遍在性 -- すべての主要言語にネイティブまたは十分にメンテナンスされたJSONパーサーがあり、統合の摩擦を排除します。
  2. ブラウザのネイティブサポート -- JavaScriptのJSON.parse()JSON.stringify()により、JSONはWebアプリケーションにとって自然な選択肢となります。
  3. 最小限の帯域幅 -- JSONの軽量な構文はXMLよりも小さなペイロードを生成し、レイテンシと帯域幅コストを削減します。
  4. 人間の可読性 -- 開発者は特別なツールなしでJSONデータを検査、デバッグ、手書きできます。
  5. 柔軟なスキーマ -- XML SchemaやProtocol Buffersのような硬直したフォーマットとは異なり、JSONは再コンパイルなしで進化するデータ構造に対応します。

JSONの一般的なユースケース

  • RESTおよびGraphQL API -- リクエストとレスポンスのペイロードの標準フォーマット。
  • 設定ファイル -- ESLint、Prettier、webpack、VS Codeなどのツールで使用される。
  • NoSQLデータベース -- MongoDBとCouchDBはJSONのようなドキュメントとしてデータを格納する。
  • データシリアライゼーション -- 保存、転送、キャッシュ用にデータを構造化する。
  • リアルタイム通信 -- WebSocketストリームとWebhookにおけるJSONメッセージ。
  • ログ集約 -- Winston、Logstash、Datadogなどの構造化ロギングツールが、検索可能でフィルタリング可能なログエントリにJSONを使用する。

JSONの検証とフォーマット

JSONを扱う際、検証は重要です。単一の構文エラー -- 末尾のカンマ、引用符の欠落、エスケープされていない文字 -- が、API統合全体や設定ファイルを壊す可能性があります。特に大きなJSONドキュメントでは、手動による検査は信頼できません。

JSONの検証方法

検証は通常、次の手順に従います:

  1. JSON文字列をパースする -- JavaScriptのJSON.parse()やお好みの言語の同等機能など、標準的なパーサーを使用します。
  2. 構文エラーをチェックする -- パーサーは最初の違反箇所で、問題の場所を示すメッセージとともにエラーをスローします。
  3. エラーを繰り返し修正する -- パーサーは最初のエラーで停止するため、修正してからドキュメントが合格するまで再検証します。

ほとんどのオンラインJSONツールは検証とフォーマットを組み合わせています。JSONを貼り付けると、ツールは即座に構文をチェックし、行番号と列番号付きでエラーをハイライトし、クリーンでインデントされた出力を生成します。これはコード内のパーサー例外でデバッグするよりも大幅に高速です。

JSONを扱うためのヒント

  • 使用前に必ず検証する -- 手書きのJSONが有効であると決して仮定しない。
  • リンターを使用する -- JSONプラグイン付きのESLintなどのツールは、本番環境に到達する前にエラーを検出します。
  • JSONライブラリを優先する -- 文字列連結ではなくシリアライゼーションライブラリでJSONを生成し、微妙な構文エラーを回避します。
  • 厳格なContent-Typeヘッダーを設定する -- APIの場合、Content-Type: application/jsonを強制して、不正なリクエストを早期に拒否します。

無料のオンラインJSONバリデーター&フォーマッターを使用して、JSON構文を即座にチェックし、エラーを特定し、読みやすいようにデータをフォーマットしてください。基本を学ぶ初心者でも、本番APIをデバッグする経験豊富な開発者でも、当サイトのJSONフォーマッター&バリデーターツールはJSONデータを効率的に扱うのに役立ちます。