3.

JSON(.json)の完全ガイド — RFC 8259・データモデル・JSON Schema・jq・YAML/TOML との比較

編集
この記事の要点
  • JSON(JavaScript Object Notation)は RFC 8259 / ECMA-404 で標準化されたテキスト型のデータ交換フォーマット
  • object / array / string / number / boolean / null の 6 種類のみを持つシンプルなデータモデル
  • コメント不可・末尾カンマ不可・キーは必ずダブルクォート文字列という厳格な仕様
  • エンコーディングは UTF-8 が事実上の標準(RFC 8259 では UTF-8 を必須と規定)
  • JSON Schema による型検証、jq による CLI 操作、JSON Lines(NDJSON)などのエコシステムが豊富
  • Web API のレスポンス・設定ファイル・ログ出力・NoSQL ドキュメント形式など、最も広く使われるデータ交換形式

概要

JSON(ジェイソン、JavaScript Object Notation)は、2001 年頃に Douglas Crockford が JavaScript のオブジェクトリテラル構文をベースに体系化したテキスト型データ交換フォーマットです。2013 年に ECMA-404、2014 年に RFC 7159、2017 年に RFC 8259 / STD 90 として標準化されました。「JavaScript」と名が付くものの言語非依存で、現在では Web API・設定ファイル・ログ・NoSQL(MongoDB など)・IaC など、ありとあらゆる場面で利用されるデータ交換の事実標準(de facto standard)です。

拡張子は .json、MIME タイプは application/json。エンコーディングは UTF-8 が必須(RFC 8259)で、BOM の付与は非推奨です。同じ用途で競合する形式に XML・YAML・TOML・MessagePack・Protocol Buffers などがありますが、シンプルさと普及度で JSON が圧倒的優位を保っています。

構文・データモデル

JSON が持つ値は次の 6 種類だけです。

  • object: { "key": value, ... } — キーは必ずダブルクォート文字列
  • array: [ value, value, ... ]
  • string: ダブルクォートで囲む。シングルクォートは不可
  • number: 整数・浮動小数点。NaN / Infinity は不可
  • boolean: true / false(小文字のみ)
  • null: null(小文字のみ)

基本的なサンプル:

{
  "name": "Alice",
  "age": 30,
  "active": true,
  "roles": ["admin", "dev"],
  "address": {
    "city": "Tokyo",
    "zip": "100-0001"
  },
  "deleted_at": null
}

コメントは 書けません///* */ も不可)。末尾カンマ(trailing comma)も 不可 です。これらを許す方言として JSON5・JSONC(VS Code の settings.json で使用)がありますが、これらは厳密には JSON ではなく別形式です。

主な用途

  • Web API: REST / GraphQL のレスポンス・リクエストボディの大半が JSON
  • 設定ファイル: package.json(Node.js)、tsconfig.jsoncomposer.json(PHP)、.eslintrc.json など
  • NoSQL ドキュメント: MongoDB の BSON、CouchDB、Firestore など JSON をネイティブに扱う DB
  • 構造化ログ: 1 行 1 JSON の JSON Lines(.jsonl / NDJSON)形式で Fluentd・Logstash などに集約
  • IaC・宣言的定義: AWS CloudFormation テンプレート(JSON 版)、Terraform の .tf.json
  • ブラウザ・サーバ間通信: fetch() + res.json()、Ajax、WebSocket メッセージ

関連形式との比較

項目JSONYAMLTOMLXML
コメント不可可(#可(#可(<!-- -->
末尾カンマ不可不要(インデント)配列のみ可該当なし
可読性中(記号多め)高(人間向け)高(設定向け)低(タグ冗長)
パース速度非常に速い遅い速い遅い
スキーマJSON SchemaJSON Schema 流用仕様なしXML Schema / DTD
主用途API・データ交換設定・CI設定(特に Rust/Python)文書・SOAP・古い API

編集・パーサ・ツール

  • jq: コマンドラインで JSON を整形・抽出・変換する定番ツール。curl ... | jq '.users[].name' のように使う
  • JSON Schema: JSON データの型・必須項目・値域などを検証するスキーマ言語。Draft 2020-12 が最新
  • 各言語の標準ライブラリ: PHP の json_encode/json_decode、Python の json、JavaScript の JSON.parse/JSON.stringify、Go の encoding/json、Rust の serde_json
  • 整形・検証 Web ツール: JSONLint、JSON Editor Online、各種オンライン JSON フォーマッタ
  • VS Code: ネイティブで JSON のシンタックスハイライト・補完・スキーマ連携をサポート

注意点・落とし穴

  • キーはダブルクォート必須: { name: "Alice" } は JavaScript では合法だが JSON としては不正
  • 末尾カンマ禁止: [1, 2, 3,] はパースエラー。手書きで設定を書くと地味に踏みやすい
  • コメントを書きたい: コメント欄を "_comment" キーで埋め込む、または JSONC / JSON5 を採用するなどの回避策が必要
  • 数値の精度: JSON 自体は精度を規定しないが、JavaScript で扱うと double(IEEE 754)の範囲(約 53bit)に丸められる。大きな整数 ID は文字列で送るのが安全
  • UTF-8 必須: 非 ASCII 文字は のような \u エスケープでも書けるが、UTF-8 でそのまま書く方が一般的
  • 機密情報を直接書かない: 設定ファイルとして使う場合、API キー等はシークレットマネージャや環境変数(.env)に逃がす

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTML(.html / .htm)
  2. CSS(.css)
  3. JSON(.json)
  4. XML(.xml)
  5. YAML(.yaml / .yml)
  6. TOML(.toml)
  7. env(.env)
  8. INI(.ini)
  9. properties(.properties)
  10. conf(.conf)

最近更新/作成されたページ