JSONとは:データ構造と動作原理

著者: IT Sectr 公開日: 2026-03-08 読了時間: 8 分

JSON(JavaScript Object Notation)は、JavaScriptオブジェクト構文に基づくテキストベースのデータ交換形式です。REST APIや設定ファイルからデータベースやモバイルアプリケーションでのデータ保存まで、あらゆる場所で使用されています。JSON公式サイトによると、この形式はプログラミング言語に依存せず、ほぼすべての現代プラットフォームでサポートされています。JSONは、クライアントとサーバー間のデータ転送におけるデファクトスタンダードになっています。

重要ポイント

  • JSON — JavaScript構文に基づく構造化データのための軽量テキスト形式
  • 6つのデータ型 — 文字列、数値、ブール値、null、配列、オブジェクトで任意の構造に対応
  • 普遍性 — すべてのプログラミング言語とプラットフォームでサポート
  • REST API — Webおよびモバイルアプリケーションにおけるデータ交換の主要形式
  • 人間可読性 — シンプルな構文でツールなしでも簡単に読み書き可能

JSONとは?

JSONは、構造化データを表現するためのテキスト形式で、JavaScript構文に基づいています。JavaScriptに由来するものの、この形式は完全に言語に依存しません — すべての主要なプログラミング言語にパーサーとシリアライザーが存在します。

JSONの歴史は2000年代初頭に始まり、Douglas Crockfordがデータ交換のためにJavaScript構文のサブセットを抽出しました。2013年にこの形式はECMA-404として標準化され、その後ISO/IEC 21778:2017として標準化されました。名称はJavaScript Object Notationの略です。

JSONの主な利点は、そのミニマルな構文です。データを記述するために使用される型は、文字列、数値、ブール値、null、配列、オブジェクトのわずか6つです。これは、アプリケーションで使用されるあらゆるデータ構造を表現するのに十分です。

JSONの使用箇所

  • REST API — サーバーとクライアント間のリクエストとレスポンスの主要形式
  • 設定ファイル — package.json、tsconfig.json、.prettierrc
  • データベース — MongoDB、PostgreSQL(JSONB)、Firebase Firestore
  • モバイルアプリケーション — 設定の保存、データキャッシング
  • Web技術 — WebSocket、Server-Sent Events、localStorage

JSONの構文とデータ型

JSONの構文は非常にシンプルです。データはキーと値のペアで表現され、キーは二重引用符で囲まれた文字列、値は6つの基本型のいずれかです。オブジェクトは中括弧で囲まれ、配列は角括弧で囲まれます。文字列は二重引用符を使用する必要があり、一重引用符は許可されていません。

JSONの数値は、整数または浮動小数点、正または負、指数表記が可能です。ブール値はtrueとfalseのリテラルで表現され、値の欠如はnullで表現されます。配列には、ネストされた配列やオブジェクトを含む、任意の型の値の順序付きセットが含まれます。

json
{
  "name": "JSON",
  "type": "text",
  "version": 2024,
  "flexible": true,
  "extensions": null,
  "languages": [
    "JavaScript",
    "Python",
    "Java"
  ],
  "nested": {
    "info": "ネストされたサポート"
  }
}
説明
文字列 “テキスト” 二重引用符で囲み、エスケープシーケンス使用可能
数値 42 整数、浮動小数点、指数
ブール値 true trueまたはfalse — 引用符なし
null null 値の欠如
オブジェクト {} キーと値のペアの順序なしセット
配列 [] 値の順序付きリスト

REST APIにおけるJSON

JSONは、モバイルおよびWeb開発におけるREST APIの主要なデータ交換形式です。サーバーはレスポンスボディでJSONを送信し、クライアントはリクエストボディで送信します。JSONの標準Content-Typeヘッダーはapplication/jsonです。

現代のREST APIは、単純なリストからエンティティ間の関係を持つ複雑なネスト構造まで、あらゆるタイプのデータを送信するためにJSONを使用します。クライアントライブラリ(JavaScriptのAxiosやAndroidのRetrofitなど)は、JSONを自動的にシリアライズおよびデシリアライズし、開発者を手動解析から解放します。

REST APIにおけるJSONの重要な利点は、クエリパラメータによる部分的なデータ転送(部分レスポンス)の可能性と、サーバーへの追加リクエストなしでのネストされたリソースのサポートです。

モバイルプラットフォームでのJSON解析

JSON解析は、モバイルプラットフォームでは組み込みツールを使用して実行されます。AndroidはGoogleのGsonまたはSquareのMoshiを使用し、iOSはJSONDecoderと共にCodableプロトコルを使用します。各プラットフォームは、JSONをネイティブオブジェクトに変換するための便利なツールを提供しています。

Android(Kotlin)でのJSON

Androidでは、GsonまたはMoshiを使用するアプローチが一般的です。@SerializedNameアノテーションを持つデータクラスを定義し、デシリアライゼーションにfromJsonを呼び出すだけです。ライブラリは自動的にJSONフィールド名をクラスのプロパティにマッピングします。

kotlin
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName

data class User(
    @SerializedName("id") val id: Int,
    @SerializedName("name") val name: String,
    @SerializedName("email") val email: String
)

fun parseJson(jsonString: String): User {
    val gson = Gson()
    return gson.fromJson(jsonString, User::class.java)
}

iOS(Swift)でのJSON

iOSでは、JSONDecoderと共に組み込みのCodableプロトコルが使用されます。データ構造はCodableに準拠したstructとして宣言され、その後JSONは1行で解析されます。JSONEncoderは逆シリアライゼーションを実行します — オブジェクトをJSONに変換してサーバーに送信します。

swift
import Foundation

struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

func parseJSON(from data: Data) throws -> User {
    let decoder = JSONDecoder()
    return try decoder.decode(User.self, from: data)
}

JSON vs XML:形式比較

JSONとXMLは、構造化データを送信するための2つの主要な形式です。JSONはシンプルさとパフォーマンスで優れ、XMLは厳格さと検証で優れています。どちらを選ぶかはプロジェクトの要件に依存します。REST APIではJSONがより頻繁に使用され、スキーマを持つ複雑なドキュメントではXMLが使用されます。

XMLはすべての要素にクロージングタグが必要であり、JSONと比較してデータサイズが2〜3倍増加します。同時にXMLは、名前空間、XSDスキーマ、属性、XSLT変換をサポートしており、ドキュメント管理やエンタープライズシステム統合のタスクにおいてより強力です。

特性 JSON XML
構文 ミニマル、キーと値 タグベース、開始タグと終了タグ
データサイズ コンパクト JSONの2〜3倍
データ型 6つの基本型 テキストのみ、スキーマ経由で型指定
検証 組み込みなし、JSON Schema経由 XSD — 厳格で成熟
名前空間 なし 完全な名前空間サポート
解析速度 高速 複雑さのため低速

JSONの使用例

は、モバイル開発におけるJSONの典型的な操作を示しています:APIレスポンスの解析、送信用JSONの作成、ネストされた構造の処理。これらのパターンを理解することは、モバイルアプリケーション開発者にとって不可欠です。

オブジェクトのJSONへのシリアライズ

JavaScriptでは、JSON.stringifyがオブジェクトをJSON文字列に変換します。第2引数は、選択的シリアライゼーションのためのキーの配列、または置換関数にすることができます。第3引数は、フォーマット用のインデントを設定します。

typescript
interface Order {
  id: string;
  items: OrderItem[];
  total: number;
  createdAt: string;
}

const order: Order = {
  id: 'ord_001',
  items: [{ product: 'phone', quantity: 2 }],
  total: 1599.98,
  createdAt: '2026-07-03T10:00:00Z'
};

const jsonString = JSON.stringify(order, null, 2);

ネストされたJSONの解析

Moshiライブラリを使用したKotlinでは、ネストされたJSONオブジェクトはネストされたデータクラスを通じて処理されます。@Jsonアノテーションは、クラスのプロパティ名と異なる場合にJSONフィールド名を指定します。配列は要素型を持つListとして表現されます。

kotlin
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

data class ApiResponse(
    val status: String,
    val data: List<Product>,
    val pagination: Pagination
)

data class Product(
    val id: Int,
    val title: String,
    val price: Double
)

data class Pagination(
    val page: Int,
    val total: Int
)

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

JSON Schema:構造検証

JSON Schemaは、XMLのXSDと同様に、JSONドキュメントの構造を記述するための言語です。JSON Schemaを使用すると、必須フィールド、データ型、値の範囲、文字列パターン、ネストされた構造を指定できます。スキーマ検証は、アプリケーションで処理される前にデータエラーを検出します。

JSON Schemaは、REST APIを文書化するためのOpenAPI(Swagger)、入力データ検証フォーム、テストで広く使用されています。スキーマファイル自体がJSONドキュメントであるため、標準のJSONパーサーで読み取ることができます。すべての主要なプログラミング言語にオンラインバリデーターとライブラリが存在します。

モバイル開発では、JSON Schemaはテスト中のサーバーレスポンスの検証や設定ファイルのチェックに使用されます。Androidのnetwork-validatorやjson-schema-validatorのようなライブラリは、検証を開発プロセスに直接組み込み、初期段階でのエラーを防止することを可能にします。

よくある質問

JSONはどのようなデータ型をサポートしていますか?

JSONは6つの型をサポートしています:文字列(二重引用符で囲む)、数値(整数および浮動小数点)、ブール値(true/false)、null、オブジェクト({}内のキーと値のペア)、配列([]内の値のリスト)。アプリケーションのあらゆるデータ構造に十分です。

JSONでコメントを使用できますか?

いいえ、JSON標準はコメントをサポートしていません。コメントが必要な場合は、JSON5(拡張JSON)を使用するか、説明フィールドを追加してください(例:“_comment”: “説明”)。VS Codeなどの一部のツールは、設定JSONファイル内のコメントをサポートしていますが、これは非標準の拡張です。

PostgreSQLのJSONとJSONBの違いは何ですか?

JSONBは、PostgreSQLにおけるJSONのバイナリ保存形式です。テキストJSONとは異なり、JSONBは処理が高速で、インデックス作成(GINインデックス)をサポートし、キーの一意性を保証します。ただし、JSONBはメタデータが追加されるため、ディスク上のスペースをより多く占有します。

JSONの有効性を確認するにはどうすればよいですか?

簡単な確認にはJSONLint(jsonlint.com)、try-catch付きのJavaScriptの組み込みJSON.parse()、またはIDEプラグインを使用してください。検証には、正しい引用符、括弧の閉じ方、型の適合性の確認が含まれます。複雑なスキーマについては、JSON Schema Validatorを使用してください。

JSONファイルの最大サイズはいくつですか?

JSON仕様には制限はありません。実際には、サイズはデバイスのメモリとパーサーの能力によって制限されます。モバイルアプリケーションでは、1回のレスポンスで1〜2 MBを超えないことが推奨され、大規模なデータにはページネーションまたはストリーミングを使用してください。

まとめ

  • JSON — 構造化情報を交換するための6つのデータ型を持つミニマルなテキスト形式
  • 言語非依存 — JSONパーサーはすべての主要なプログラミング言語に存在
  • REST APIはモバイルアプリケーションのリクエストとレスポンスにJSONを標準形式として使用
  • 解析は組み込みツールで実行:AndroidではGson/Moshi、iOSではCodable
  • JSONはXMLより2〜3倍コンパクトだが、パフォーマンスではProtobufに劣る
  • 人間可読性 — 特別なツールなしで構文の読み取りとデバッグが容易
  • JSON Schema — 構造とデータ型を検証するための追加ツール

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください