Tutorial

JSONとは?

JSONの定義から構文ルール、データ型、JavaScriptやPythonでの具体的な操作方法までを詳しく解説します。

2026-04-015 min read

JSONとは?

JSON(JavaScript Object Notation)は、軽量なデータ保存・交換フォーマットです。JSONの核となる設計理念は、人間が読みやすく、かつ機械が解析しやすいことです。この二つの特性により、JSONは現代のWeb開発において最も重要なデータ交換フォーマットの一つとなっています。

JSONはもともとJavaScript言語に由来しますが、現在ではプログラミング言語から完全に独立したデータフォーマット規格へと発展しました。Python、Java、PHP、Rubyをはじめ、ほとんどすべての現代的なプログラミング言語がJSONの読み取りと生成をネイティブにサポートしています。このクロスプラットフォームな互換性により、JSONはサーバーとクライアント間、異なるシステム間でのデータ伝送において第一選択肢となっています。

JSONはプレーンテキスト形式を採用しているため、特定のソフトウェアやプラットフォームに依存せず、テキスト処理が可能なあらゆる環境で伝送・保存できます。

JSONの「軽量」という特性は二つの側面に現れています。第一に、その構文構造は非常に簡潔で、冗長なマークアップやフォーマット要件を一切含みません。第二に、JSONファイルは通常、同じデータのXMLファイルよりも30〜50%小さく、大量のデータを頻繁に伝送する必要があるWebアプリケーションにおいて、ネットワークオーバーヘッドと読み込み時間を大幅に削減できます。

JSONの構文ルール

JSONの構文設計は厳格なルールに従っており、これによりデータ形式の一貫性と解析可能性が確保されています。これらの基本ルールを理解することが、JSONを正しく使用するための基礎となります。

基本構文構造

  • キーと値のペア形式:JSONデータは名前/値のペアで構成され、各ペアはコロンで区切られます(例:"name": "John"
  • ダブルクォートの強制:すべてのキー名はダブルクォートで囲む必要があります。これがJSONとJavaScriptオブジェクトの重要な違いです
  • データ区切り文字:複数のキーと値のペアはカンマで区切りますが、最後のペアの後にはカンマを付けられません
  • オブジェクトコンテナ:中括弧 {} はオブジェクトを囲み、順序なしのキーと値のペアの集合を表します
  • 配列コンテナ:角括弧 [] は配列を囲み、順序ありの値のリストを表します
  • ネスト構造:オブジェクトと配列は相互にネストでき、複雑なデータ階層構造を形成できます

注意すべきポイント:JSONのよくあるエラー

実際の開発では、開発者はJSON形式に関するよくあるエラーに遭遇することがあります。以下は特に注意すべき「トラップ」です:

1. JSONはコメントをサポートしない

JSON仕様では、いかなる形式のコメントも明示的にサポートされていません。JSONファイルに ///* */ 形式のコメントを追加すると、パーサーは直接エラーを報告します。JSONに説明情報を含める必要がある場合は、"_comment": "これは説明文です" のような特別なキーをデータに追加する方法が考えられますが、この方法は本番環境では推奨されません。

2. ダブルクォートを使用し、シングルクォートは使用できない

これは非常に一般的なエラーです。JavaScriptではシングルクォートまたはダブルクォートを使用して文字列を定義できますが、JSONではすべての文字列にダブルクォートを使用しなければなりません。例えば、{'name': 'John'} は無効なJSONであり、{"name": "John"} と記述する必要があります。

3. 最後の要素の後にカンマを付けられない

JavaScriptでは、オブジェクトや配列の最後の要素の後にオプションのカンマを付けることができますが、JSONではこれは厳しく禁止されています。{"name": "John",} は解析エラーの原因となり、正しい形式は {"name": "John"} です。

4. キー名は文字列でなければならない

JSONではすべてのキーは文字列型であり、ダブルクォートで囲む必要があります。{age: 25} のような記述はJavaScriptでは有効ですが、JSONでは無効であり、{"age": 25} と記述しなければなりません。

コアデータ型

JSONは6つのコアデータ型をサポートしており、各型には独自の構文ルールと用途があります。これらのデータ型を理解することが、JSONデータ構造を正しく構築する鍵となります。

String(文字列)

文字列はJSONで最もよく使われるデータ型で、テキスト情報を表現します。文字列はダブルクォートで囲む必要があり、任意のUnicode文字を含めることができます。JSON文字列は、\n(改行)、\t(タブ)、\"(ダブルクォート)などの一般的なエスケープ文字をサポートしています。

{
  "name": "張三",
  "email": "zhangsan@example.com",
  "address": "北京市朝陽区\n建国路88号"
}

Number(数値)

JSONの数値型には整数と浮動小数点数が含まれ、八進数や十六進数形式はサポートされていません。数値は正数、負数、小数部分、または科学的記数法を含むことができます。

{
  "age": 28,
  "price": 99.99,
  "temperature": -5,
  "largeNumber": 3.14e10
}

Object(オブジェクト)

オブジェクトは順序なしのキーと値のペアの集合で、中括弧で囲みます。各キーと値のペアのキーは文字列でなければならず、値は任意の有効なJSONデータ型です。オブジェクトはネストして、複雑なデータ構造を形成できます。

{
  "user": {
    "profile": {
      "name": "李四",
      "age": 32
    },
    "preferences": {
      "theme": "dark",
      "language": "ja-JP"
    }
  }
}

Array(配列)

配列は順序ありの値のリストで、角括弧で囲みます。配列内の値は任意のJSONデータ型(混合型も可)です。配列はユーザーリストやタグなどの集合データを表現するのに特に適しています。

{
  "users": ["Alice", "Bob", "Charlie"],
  "scores": [95, 87, 92, 88],
  "mixed": [1, "two", true, null]
}

Boolean(ブール値)

ブール値は true または false の2つの値のみを持ちます。これらの値は小文字であり、引用符で囲む必要がないことに注意してください。

{
  "isActive": true,
  "hasPermission": false,
  "isPremium": true
}

Null(ヌル)

null は空の値または存在しない値を表します。これも引用符で囲む必要はなく、小文字でなければなりません。

{
  "middleName": null,
  "avatar": null,
  "lastLoginTime": null
}

JSON vs XML

JSONとXMLはどちらもデータ保存と伝送のためのフォーマットですが、設計理念、構文構造、使用シナリオに顕著な違いがあります。以下の比較表は、両者の違いを素早く理解するのに役立ちます:

特性JSONXML
正式名称JavaScript Object NotationeXtensible Markup Language
ファイルサイズより小さい(通常XMLより30-50%小さい)大きい(閉じタグが必要)
可読性簡潔で明確、読みやすい構造は明確だが冗長
解析速度より速い(標準関数で解析可能)遅い(XMLパーサーが必要)
データ型複数のネイティブデータ型をサポートテキストのみ、型の自己定義が必要
配列サポートネイティブで配列をサポート配列の概念をサポートしない
コメントコメントをサポートしないコメントをサポート
名前空間サポートしない名前空間をサポート
適用シナリオWeb API、モバイルアプリ、設定ファイルエンタープライズ向けドキュメント、複雑なデータ構造

選択のアドバイス:現代のWeb開発やモバイルアプリケーションには、軽量で解析が速く、JavaScriptとのネイティブな互換性が高いJSONが通常はより良い選択です。XMLは、複雑なドキュメント構造、名前空間サポート、厳格な検証が必要なエンタープライズ向けアプリケーションシナリオにより適しています。

実践:JS/PythonでJSONを操作する方法

実際の開発では、最も一般的なJSON操作は、JSON文字列をプログラム内のオブジェクトに変換すること、およびオブジェクトをJSON文字列に変換することです。以下は、JavaScriptとPythonでの具体的な実装方法です。

JavaScriptでのJSON操作

JavaScriptはJSONデータを処理するための2つのコアメソッド JSON.parse()JSON.stringify() を提供しています。

1. JSON.parse() - JSON文字列をJavaScriptオブジェクトに変換

// JSON文字列
const jsonString = '{"name": "張三", "age": 28, "city": "北京"}';

// JavaScriptオブジェクトに解析
const obj = JSON.parse(jsonString);

// 解析後のオブジェクトを使用
console.log(obj.name);  // 出力: 張三
console.log(obj.age);   // 出力: 28

// ネスト構造の処理
const complexJson = `{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}`;
const data = JSON.parse(complexJson);
console.log(data.user.profile.name);      // 出力: 李四
console.log(data.user.skills[0]);          // 出力: JavaScript

2. JSON.stringify() - JavaScriptオブジェクトをJSON文字列に変換

// JavaScriptオブジェクト
const user = {
  name: "王五",
  age: 32,
  email: "wangwu@example.com",
  isActive: true
};

// JSON文字列に変換
const jsonString = JSON.stringify(user);
console.log(jsonString);
// 出力: {"name":"王五","age":32,"email":"wangwu@example.com","isActive":true}

// フォーマット出力(インデント付き)
const prettyJson = JSON.stringify(user, null, 2);
console.log(prettyJson);
/* 出力:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "isActive": true
}
*/

// 特定の属性のみを含める
const filtered = JSON.stringify(user, ["name", "email"], 2);
console.log(filtered);
/* 出力:
{
  "name": "王五",
  "email": "wangwu@example.com"
}
*/

PythonでのJSON操作

Pythonには json モジュールが組み込まれており、JavaScriptと同様の機能を提供しています。

1. json.loads() - JSON文字列をPythonオブジェクトに変換

import json

# JSON文字列
json_string = '{"name": "張三", "age": 28, "city": "北京"}'

# Python辞書に解析
data = json.loads(json_string)

# 解析後のデータを使用
print(data['name'])  # 出力: 張三
print(data['age'])   # 出力: 28

# ネスト構造の処理
complex_json = '''
{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}
'''
data = json.loads(complex_json)
print(data['user']['profile']['name'])      # 出力: 李四
print(data['user']['skills'][0])            # 出力: JavaScript

2. json.dumps() - PythonオブジェクトをJSON文字列に変換

import json

# Python辞書
user = {
    "name": "王五",
    "age": 32,
    "email": "wangwu@example.com",
    "is_active": True,
    "skills": ["Python", "JavaScript", "Go"]
}

# JSON文字列に変換
json_string = json.dumps(user)
print(json_string)
# 出力: {"name": "王五", "age": 32, "email": "wangwu@example.com", ...}

# フォーマット出力(インデント付き)
pretty_json = json.dumps(user, indent=2, ensure_ascii=False)
print(pretty_json)
""" 出力:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "is_active": true,
  "skills": [
    "Python",
    "JavaScript",
    "Go"
  ]
}
"""

# キーでソート
sorted_json = json.dumps(user, sort_keys=True, indent=2)
print(sorted_json)

現代開発におけるJSONの重要性

OracleとDigitalOceanの分析によると、JSONは現代のソフトウェア開発において不可欠な役割を果たしています:

API通信:ほとんどすべてのモダンなRESTful APIがJSONをデータ交換フォーマットとして使用しています。軽量で解析が容易であり、JavaScriptとのネイティブな互換性があるためです。

データベースストレージ:NoSQLデータベース(MongoDB、Couchbaseなど)はJSON形式のストレージをネイティブサポートしており、主流のリレーショナルデータベース(Oracle、PostgreSQL、MySQLなど)もJSONデータ型のサポートを開始しており、開発者はリレーショナルデータベースで柔軟にJSONデータを保存およびクエリできます。

設定ファイル:package.json(Node.js)、tsconfig.json(TypeScript)、.vscode/settings.json(VS Code)など、ますます多くのアプリケーションや開発ツールがJSONを設定ファイル形式として採用しています。これは、JSONの簡潔性と可読性が従来のINIやXML形式よりも優れているためです。


JSONツールを引き続き使用する

JSON Work チーム

開発者に最高のJSON処理ツールを提供することに専念

関連投稿

さらに多くの投稿が近日公開予定...

ブログに戻る

関連ツール

よくある質問

更新の追い方、扱うトピック、リクエストについて。

新着記事を見逃さないには?

このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。

どんな内容が中心ですか?

JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。

チュートリアル題材の提案はできますか?

はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。

ヘルプが必要ですか?