※本ページにはプロモーション(広告)が含まれています
「JSONってよく聞くけど、結局なに?」「APIのレスポンスがJSONで返ってくるけど、読み方がわからない」――そんな疑問を持っている方は多いのではないでしょうか。
JSON(JavaScript Object Notation)は、現在のWeb開発やアプリ開発で最も広く使われているデータ交換フォーマットです。プログラミング初心者からエンジニアまで、JSONを理解しておくことは必須スキルといえます。
この記事では、JSONの基本的な仕組みから具体的な読み書き方法、API連携での活用法、さらにJSON Schemaによるバリデーションまで、2026年最新の情報をもとに徹底解説します。

この記事でわかること
- JSONとは何か、なぜ広く使われているのかの基本知識
- JSONの構文規則(オブジェクト、配列、ネスト構造)
- JSONで扱える6つのデータ型
- XMLとの違いと、JSONが選ばれる理由
- JavaScript・Python・PHPでのJSON読み書き方法
- REST APIとJSONの関係
- JSONバリデーターツールの使い方
- JSON Schemaの基本
JSONとは?初心者にもわかる基礎知識
JSONの正式名称と歴史
JSONは「JavaScript Object Notation」の略称です。日本語では「ジェイソン」と読みます。
もともとはJavaScriptのオブジェクト記法をベースに作られたデータフォーマットですが、現在ではプログラミング言語に依存しない独立したデータ形式として広く普及しています。
JSONの歴史を簡単に振り返ると、以下の通りです。
| 年 | 出来事 |
|---|---|
| 2001年 | Douglas Crockford氏がJSONフォーマットを提唱 |
| 2006年 | RFC 4627として標準化される |
| 2013年 | ECMA-404として国際標準に認定 |
| 2017年 | RFC 8259として改訂版が公開(現行標準) |
| 2026年現在 | Web API、設定ファイル、データベースなど幅広く利用 |
JSONが使われる場面
JSONは私たちの身近なところで数多く使われています。具体的には次のような場面です。
- Web APIの通信:天気予報アプリ、SNS、ECサイトなど、サーバーとのデータのやり取りにJSONが使われています
- 設定ファイル:VS Codeの設定(settings.json)、Node.jsのパッケージ管理(package.json)など
- データベース:MongoDBのようなNoSQLデータベースはJSON形式でデータを保存します
- データの保存・受け渡し:異なるシステム間でデータを交換する共通フォーマットとして利用
- ログファイル:構造化ログ(Structured Logging)でJSON形式が採用されるケースが増加
たとえば、スマートフォンで天気予報アプリを開いたとき、裏側ではアプリがサーバーにリクエストを送り、サーバーがJSON形式で天気データを返しています。このように、普段意識していなくても、JSONは日常的に使われているのです。
JSONが人気な理由
数あるデータフォーマットの中で、JSONがここまで普及した理由は主に3つあります。
1. 人間が読みやすい(Human-readable)
JSONはテキストベースのフォーマットで、プログラミングの知識がなくてもある程度内容を読み取れます。以下の例を見てください。
{
"name": "田中太郎",
"age": 30,
"city": "東京"
}
「nameが田中太郎、ageが30、cityが東京」ということが、直感的に理解できますよね。
2. 機械が処理しやすい(Machine-parsable)
JSONはシンプルな構造のため、プログラムで解析(パース)する処理が高速です。ほとんどすべてのプログラミング言語に、JSON読み書き用のライブラリが標準で用意されています。
3. 軽量で通信効率が良い
XMLなど他のフォーマットと比べて、同じデータを表現する際のファイルサイズが小さくなります。これはネットワーク通信のコスト削減につながります。
JSONの基本構文をマスターしよう
ここからは、JSONの具体的な書き方(構文規則)を解説します。ルールはシンプルなので、一つずつ確認していきましょう。
オブジェクト({})の書き方
JSONの最も基本的な構造が「オブジェクト」です。波括弧 {} で囲み、「キー」と「値」のペアをコロン : で区切って記述します。
{
"firstName": "太郎",
"lastName": "田中",
"email": "taro@example.com"
}
オブジェクトの書き方で覚えておくべきルールは次の通りです。
- キーは必ずダブルクォーテーション(””)で囲む:シングルクォーテーションは使えません
- キーと値はコロン(:)で区切る
- 複数のペアはカンマ(,)で区切る
- 最後のペアの後にカンマを付けない(トレイリングカンマは許可されていません)
// NG(JSONでは構文エラー)
{
"name": "太郎",
"age": 30, ← この最後のカンマがNG
}
配列([])の書き方
複数の値をまとめて扱いたいときは「配列」を使います。角括弧 [] で囲み、値をカンマで区切ります。
{
"fruits": ["りんご", "みかん", "ぶどう"],
"scores": [85, 92, 78, 95],
"flags": [true, false, true]
}
配列内の要素は同じ型である必要はなく、異なる型を混在させることも可能です(ただし、実用上は同じ型で統一することが推奨されます)。
ネスト(入れ子構造)
JSONの大きな特徴の一つが、オブジェクトや配列を入れ子にできることです。これにより、複雑なデータ構造を表現できます。
{
"user": {
"name": "田中太郎",
"age": 30,
"address": {
"prefecture": "東京都",
"city": "渋谷区",
"zipCode": "150-0001"
},
"hobbies": ["読書", "プログラミング", "旅行"],
"orders": [
{
"orderId": "A001",
"product": "ノートPC",
"price": 89800
},
{
"orderId": "A002",
"product": "マウス",
"price": 3500
}
]
}
}
上の例では、user オブジェクトの中に address オブジェクトがネストされ、さらに orders 配列の中にオブジェクトが格納されています。このように階層構造を自由に組み合わせられるのがJSONの柔軟さです。

JSONのデータ型(6種類)
JSONで使用できるデータ型は6種類です。これ以外の型は存在しないため、覚えやすいのもJSONの長所です。
| データ型 | 説明 | 例 |
|---|---|---|
| 文字列(string) | ダブルクォーテーションで囲んだテキスト | "Hello" |
| 数値(number) | 整数または浮動小数点数 | 42, 3.14, -10 |
| 真偽値(boolean) | true または false | true, false |
| null | 値が存在しないことを表す | null |
| オブジェクト(object) | キーと値のペアの集合 | {"key": "value"} |
| 配列(array) | 値の順序付きリスト | [1, 2, 3] |
各データ型の注意点
文字列(string)
- 必ずダブルクォーテーション(
"")で囲みます。シングルクォーテーション('')は使用できません - 特殊文字はエスケープが必要です:
\"(ダブルクォーテーション)、\\(バックスラッシュ)、\n(改行)、\t(タブ) - Unicode文字は
\uXXXX形式で表現できます(例:\u3042= あ)
数値(number)
- 整数と浮動小数点数の両方が使えます
- 指数表記も可能です(例:
1.5e10) - 注意:先頭にゼロを付けた数値(
01、007など)は許可されていません - 注意:
NaN(非数)やInfinity(無限大)はJSONでは使用できません
真偽値(boolean)
trueとfalseはすべて小文字で記述しますTrueやFALSEと書くと構文エラーになります
null
- すべて小文字で
nullと書きます NullやNULLは構文エラーです- 「値が未定」「データなし」を表現するときに使います
"2026-03-17T10:30:00Z")として格納するのが一般的です。受け取り側のプログラムで文字列を日付オブジェクトに変換して使用します。
JSONとXMLの比較
JSONが登場する以前は、XMLがデータ交換のスタンダードでした。現在でもXMLは使われていますが、多くの場面でJSONに置き換わっています。両者の違いを比較してみましょう。
同じデータをJSONとXMLで表現
JSON形式:
{
"employees": [
{
"name": "田中太郎",
"department": "開発部",
"age": 30
},
{
"name": "鈴木花子",
"department": "営業部",
"age": 25
}
]
}
XML形式:
<employees>
<employee>
<name>田中太郎</name>
<department>開発部</department>
<age>30</age>
</employee>
<employee>
<name>鈴木花子</name>
<department>営業部</department>
<age>25</age>
</employee>
</employees>
見比べると、JSONのほうがタグの記述が少なく、データ量が軽いことがわかります。
JSONとXMLの比較表
| 比較項目 | JSON | XML |
|---|---|---|
| 可読性 | 高い(シンプルな記法) | 中程度(タグが冗長になりがち) |
| データサイズ | 軽量 | やや大きい(閉じタグが必須) |
| パース速度 | 高速 | やや遅い |
| コメント | 書けない | 書ける(<!– –>) |
| スキーマ検証 | JSON Schema | XSD、DTD |
| 名前空間 | なし | あり(xmlns) |
| 属性 | なし(キーバリューのみ) | あり(属性を付与可能) |
| 主な用途 | Web API、設定ファイル、NoSQL DB | SOAP、RSS、SVG、Office文書 |
どちらを選ぶべきか
結論として、2026年現在の新規開発であればJSONを選ぶのが一般的です。特にREST APIやフロントエンド開発ではJSONが事実上の標準となっています。
ただし、XMLが有利な場面もあります。
- 既存システムとの互換性が必要な場合(SOAPベースのWebサービスなど)
- ドキュメント構造を扱う場合(HTMLやSVGはXMLベース)
- 名前空間を使って異なるスキーマを混在させたい場合
- コメントを含むデータファイルを扱いたい場合
プログラミング言語ごとのJSON読み書き方法
ここからは、実際にプログラミング言語でJSONを扱う方法を解説します。JavaScript、Python、PHPの3言語について、基本的な読み込み(パース)と書き出し(シリアライズ)のコードを紹介します。
JavaScript(JSON.parse / JSON.stringify)
JavaScriptにはJSON操作用のメソッドが標準で組み込まれています。追加のライブラリは不要です。
JSON文字列 → JavaScriptオブジェクト(パース):
// JSON文字列を定義
const jsonString = '{"name": "田中太郎", "age": 30, "city": "東京"}';
// パース(JSON → オブジェクト)
const user = JSON.parse(jsonString);
console.log(user.name); // 田中太郎
console.log(user.age); // 30
JavaScriptオブジェクト → JSON文字列(シリアライズ):
const user = {
name: "鈴木花子",
age: 25,
hobbies: ["読書", "料理"]
};
// シリアライズ(オブジェクト → JSON)
const jsonString = JSON.stringify(user);
console.log(jsonString);
// {"name":"鈴木花子","age":25,"hobbies":["読書","料理"]}
// 整形出力(インデント2スペース)
const prettyJson = JSON.stringify(user, null, 2);
console.log(prettyJson);
// {
// "name": "鈴木花子",
// "age": 25,
// "hobbies": [
// "読書",
// "料理"
// ]
// }
fetch APIでJSON取得:
// Web APIからJSONデータを取得する例
async function getUser(userId) {
const response = await fetch(`https://api.example.com/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const userData = await response.json(); // レスポンスをJSONとしてパース
return userData;
}
// 使用例
getUser(1).then(user => {
console.log(user.name);
});
Python(json モジュール)
Pythonでは標準ライブラリの json モジュールを使います。追加インストールは不要です。
JSON文字列 → Python辞書(パース):
import json
# JSON文字列をパース
json_string = '{"name": "田中太郎", "age": 30, "city": "東京"}'
user = json.loads(json_string)
print(user["name"]) # 田中太郎
print(user["age"]) # 30
print(type(user)) # <class 'dict'>
Python辞書 → JSON文字列(シリアライズ):
import json
user = {
"name": "鈴木花子",
"age": 25,
"hobbies": ["読書", "料理"]
}
# シリアライズ(辞書 → JSON文字列)
json_string = json.dumps(user, ensure_ascii=False, indent=2)
print(json_string)
# {
# "name": "鈴木花子",
# "age": 25,
# "hobbies": [
# "読書",
# "料理"
# ]
# }
ensure_ascii=False を指定しないと、日本語が \u3042 のようなUnicodeエスケープに変換されてしまいます。日本語をそのまま出力したい場合は必ず設定しましょう。
JSONファイルの読み書き:
import json
# JSONファイルの読み込み
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f) # ← loads ではなく load(ファイルオブジェクト用)
# JSONファイルへの書き込み
with open("output.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2) # ← dumps ではなく dump
PHP(json_encode / json_decode)
PHPでもJSON操作用の関数が標準で用意されています。
JSON文字列 → PHP配列(パース):
<?php
$jsonString = '{"name": "田中太郎", "age": 30, "city": "東京"}';
// パース(第2引数 true で連想配列として取得)
$user = json_decode($jsonString, true);
echo $user["name"]; // 田中太郎
echo $user["age"]; // 30
// エラーチェック
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSONパースエラー: " . json_last_error_msg();
}
?>
PHP配列 → JSON文字列(シリアライズ):
<?php
$user = [
"name" => "鈴木花子",
"age" => 25,
"hobbies" => ["読書", "料理"]
];
// シリアライズ(配列 → JSON文字列)
$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $jsonString;
// {
// "name": "鈴木花子",
// "age": 25,
// "hobbies": [
// "読書",
// "料理"
// ]
// }
?>
3言語の比較まとめ
| 操作 | JavaScript | Python | PHP |
|---|---|---|---|
| パース(文字列→オブジェクト) | JSON.parse() |
json.loads() |
json_decode() |
| シリアライズ(オブジェクト→文字列) | JSON.stringify() |
json.dumps() |
json_encode() |
| ファイル読み込み | fs.readFileSync() |
json.load() |
file_get_contents() |
| ファイル書き出し | fs.writeFileSync() |
json.dump() |
file_put_contents() |
| 日本語対応 | 標準対応 | ensure_ascii=False |
JSON_UNESCAPED_UNICODE |
REST APIとJSONの関係
JSONが最も活躍する場面の一つがREST API(RESTful API)です。現代のWebサービスの多くは、REST APIを通じてJSON形式でデータをやり取りしています。
REST APIとは
REST API(Representational State Transfer API)は、Webサーバーとクライアントがデータをやり取りするための設計原則です。以下の特徴を持ちます。
- HTTPメソッドを使って操作を表現(GET=取得、POST=作成、PUT=更新、DELETE=削除)
- URL(エンドポイント)でリソースを指定
- ステートレス:各リクエストは独立して完結
- JSON形式でリクエスト・レスポンスのデータを送受信
実際のAPIリクエストとレスポンスの例
ユーザー一覧を取得する例(GET):
GET /api/users HTTP/1.1
Host: api.example.com
Accept: application/json
レスポンス(JSON):
{
"status": "success",
"data": {
"users": [
{
"id": 1,
"name": "田中太郎",
"email": "taro@example.com",
"role": "admin"
},
{
"id": 2,
"name": "鈴木花子",
"email": "hanako@example.com",
"role": "editor"
}
],
"total": 2,
"page": 1,
"perPage": 20
}
}
新しいユーザーを作成する例(POST):
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "佐藤次郎",
"email": "jiro@example.com",
"role": "viewer"
}
有名なJSON形式のAPIの例
実際に利用できるJSON形式のWeb APIは数多く存在します。以下は代表的なものです。
| API名 | 提供元 | 用途 |
|---|---|---|
| OpenWeather API | OpenWeather | 天気予報データの取得 |
| GitHub REST API | GitHub | リポジトリ、Issue、PRの操作 |
| Google Maps API | 地図、経路、ジオコーディング | |
| Twitter API(X API) | X(旧Twitter) | ツイートの取得・投稿 |
| WordPress REST API | WordPress | 記事の作成・取得・編集 |

JSONバリデーターツール
JSONを手書きで作成していると、カンマの付け忘れやダブルクォーテーションの閉じ忘れなど、小さなミスが発生しがちです。そんなときに役立つのがJSONバリデーター(検証ツール)です。
おすすめの無料JSONバリデーターツール
| ツール名 | 特徴 | URL |
|---|---|---|
| JSONLint | シンプルで使いやすい。エラー箇所をハイライト表示 | jsonlint.com |
| JSON Formatter & Validator | 整形機能付き。ツリービューでデータ構造を確認可能 | jsonformatter.curiousconcept.com |
| JSON Editor Online | GUIエディタ付き。ツリーモードとコードモードを切替可能 | jsoneditoronline.org |
| jq play | コマンドラインツール jq のオンライン版。フィルタリングが可能 | jqplay.org |
コマンドラインでのJSON検証
開発者向けには、ターミナル(コマンドライン)から直接JSONを検証する方法もあります。
Python(ワンライナー):
# JSONファイルのバリデーション
python3 -m json.tool data.json
# 結果が整形されて表示されればOK
# 構文エラーがあれば「json.decoder.JSONDecodeError」が表示される
jq コマンド(Mac/Linux):
# JSONの整形&バリデーション
cat data.json | jq .
# 特定のフィールドを抽出
cat data.json | jq '.users[0].name'
VS CodeでのJSON操作
Visual Studio Codeを使っている場合、JSONの操作がさらに便利になります。
- 自動バリデーション:.jsonファイルを開くだけで構文エラーが赤い波線で表示されます
- 整形(フォーマット):
Shift + Alt + F(Windows)またはShift + Option + F(Mac)で自動整形 - JSON Schemaの補完:package.jsonやtsconfig.jsonなど、よく使うJSONファイルはスキーマに基づいた入力補完が効きます
- 拡張機能:「JSON Tools」や「Paste JSON as Code」などの拡張機能でさらに便利に
JSON Schema入門
JSONのデータが正しい形式になっているかを厳密にチェックしたい場合、JSON Schema(JSONスキーマ)を使います。JSON Schemaは「JSONデータの設計図」のようなもので、どのフィールドが必須か、値の型は何かなどを定義できます。
JSON Schemaとは
JSON Schemaは、JSONデータの構造を定義するためのメタデータフォーマットです。以下のようなことが定義できます。
- 各フィールドのデータ型(string、number、booleanなど)
- 必須フィールドの指定
- 値の範囲(最小値・最大値)
- 文字列のパターン(正規表現)
- 列挙値(enum)
- 配列の要素数の制限
JSON Schemaの記述例
たとえば、「ユーザー情報」のJSONデータに対するスキーマは次のように書きます。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ユーザー情報",
"description": "ユーザー登録時のデータ形式",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "ユーザーの氏名",
"minLength": 1,
"maxLength": 100
},
"email": {
"type": "string",
"format": "email",
"description": "メールアドレス"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150,
"description": "年齢"
},
"role": {
"type": "string",
"enum": ["admin", "editor", "viewer"],
"description": "ユーザーの権限"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "タグ(最大10個)"
}
},
"required": ["name", "email", "role"],
"additionalProperties": false
}
このスキーマに対して、以下のJSONデータは有効(valid)です。
{
"name": "田中太郎",
"email": "taro@example.com",
"age": 30,
"role": "admin",
"tags": ["開発", "管理者"]
}
一方、以下のデータは無効(invalid)です。
{
"name": "",
"email": "not-an-email",
"age": -5,
"role": "superadmin",
"unknownField": "test"
}
無効な理由:nameが空文字(minLength: 1に違反)、emailがメール形式でない、ageが負の値、roleがenum外の値、定義外のフィールドが存在。
JSON Schemaの活用場面
- API仕様の定義:リクエスト・レスポンスの形式を明確にする
- バリデーション:受信データが正しい形式かサーバーサイドで検証する
- ドキュメント自動生成:スキーマからAPIドキュメントを自動作成
- コードの自動生成:スキーマから型定義(TypeScript等)を生成
- 設定ファイルの検証:VS Codeのsettings.jsonなど、IDEがスキーマで入力補完する
JSONを扱うときの注意点とベストプラクティス
実務でJSONを使う際に知っておくべき注意点とベストプラクティスをまとめます。
セキュリティに関する注意点
1. eval() でJSONをパースしない
JavaScriptで eval(jsonString) を使ってJSONをパースするのは非常に危険です。悪意のあるコードが実行される可能性があります。必ず JSON.parse() を使いましょう。
2. 機密情報をJSONに含めない
パスワード、APIキー、個人情報などの機密データをJSONレスポンスにそのまま含めないようにしましょう。必要最小限のデータだけを返すように設計します。
3. 入力値のバリデーション
外部から受け取ったJSONデータは必ずバリデーション(検証)してからプログラムで使用します。JSON Schemaや型チェックを活用しましょう。
パフォーマンスに関する注意点
1. 巨大なJSONの取り扱い
数MB以上の大きなJSONファイルを一括で読み込むと、メモリを大量に消費します。大きなデータを扱う場合は、ストリーミングパーサー(SAXスタイル)やページネーションの活用を検討しましょう。
2. 不要なデータを含めない
APIレスポンスに不必要なフィールドを含めると、通信量が増えてパフォーマンスが低下します。必要なフィールドだけを返すようにしましょう。GraphQLはこの問題に対する一つの解決策です。
命名規則のベストプラクティス
| 命名規則 | 例 | 主な採用先 |
|---|---|---|
| camelCase(キャメルケース) | firstName |
JavaScript、Java、Google JSON Style Guide |
| snake_case(スネークケース) | first_name |
Python、Ruby、Twitter API |
| kebab-case(ケバブケース) | first-name |
CSS、URL(JSONではあまり推奨されない) |
プロジェクト内では一つの命名規則に統一することが重要です。混在すると可読性が低下し、バグの原因にもなります。
その他のベストプラクティス
- インデントを使って整形する:開発中は可読性のために2スペースまたは4スペースのインデントを入れる
- 一貫した構造を保つ:同じ種類のデータには同じキー名・同じ構造を使う
- 日付はISO 8601形式で統一する(
"2026-03-17T10:30:00Z") - 空の値には null を使う:空文字列
""とnullは意味が異なるので使い分ける - 数値を文字列にしない:
"price": "1000"ではなく"price": 1000とする
JSON5、JSONC、JSON Linesとは(関連フォーマット)
標準のJSONにはいくつかの制約(コメントが書けない、トレイリングカンマが使えないなど)があります。これらを緩和した派生フォーマットも知っておくと便利です。
| フォーマット | 特徴 | 主な用途 |
|---|---|---|
| JSON5 | コメント、トレイリングカンマ、シングルクォーテーション、16進数などを許可 | 設定ファイル(一部のツールが対応) |
| JSONC(JSON with Comments) | コメント(// と /* */)のみを追加 |
VS Codeの設定ファイル(tsconfig.jsonなど) |
| JSON Lines(JSONL) | 1行1JSONオブジェクト。改行区切り | ログファイル、大規模データ処理、機械学習データセット |
| YAML | JSONのスーパーセット。インデントベース。コメント対応 | Docker Compose、Kubernetes、GitHub Actions |
| TOML | 設定ファイル向けのシンプルなフォーマット | Rust(Cargo.toml)、Python(pyproject.toml) |
よくある質問(FAQ)
Q1. JSONとJavaScriptのオブジェクトはどう違うのですか?
見た目は似ていますが、いくつかの違いがあります。JSONではキーを必ずダブルクォーテーションで囲む必要がありますが、JavaScriptのオブジェクトではクォーテーションなしでも書けます。また、JSONでは関数や undefined を含めることができません。JSONはあくまで「データ交換用のテキストフォーマット」であり、JavaScriptのオブジェクトは「プログラムの実行時データ」です。
Q2. JSONにコメントを書くことはできますか?
標準のJSON仕様ではコメントを書くことができません。これはJSONの設計者であるDouglas Crockford氏が意図的に排除したものです。コメントが必要な場合は、JSON5やJSONC(JSON with Comments)を使うか、YAMLなど他のフォーマットを検討しましょう。VS Codeの設定ファイル(settings.json)は実際にはJSONCとして処理されているため、コメントが書けます。
Q3. JSONファイルの拡張子は何ですか?
JSONファイルの標準的な拡張子は .json です。MIMEタイプは application/json です。APIレスポンスのContent-Typeヘッダーには Content-Type: application/json; charset=utf-8 と設定するのが正しい方法です。
Q4. JSONでは改行を含む文字列をどう表現しますか?
JSON文字列の中で改行を表現するには、エスケープシーケンス \n を使います。生の改行文字(実際にEnterキーを押した改行)をJSON文字列内に含めることはできません。例:"message": "1行目\n2行目\n3行目"
Q5. JSONとCSVはどう使い分ければいいですか?
CSVは「行と列」の単純な表形式データに適しており、Excelでの操作やデータのインポート・エクスポートに便利です。一方、JSONはネスト構造や複雑なデータ型を表現でき、API通信やプログラムでの処理に適しています。表形式のデータならCSV、階層構造や複雑なデータならJSONを選びましょう。
Q6. JSONの最大サイズに制限はありますか?
JSON仕様自体にはサイズ制限はありませんが、実用上の制限があります。Webブラウザの JSON.parse() は通常数百MBまで処理できますが、サーバーやAPIゲートウェイでリクエストサイズの上限が設定されていることが一般的です(例:Nginxのデフォルトは1MB)。大量のデータを扱う場合はJSON Lines形式やストリーミング処理を検討してください。
Q7. JSONのキーの順番に意味はありますか?
JSON仕様では、オブジェクトのキーの順番は保証されません。つまり、{"a":1,"b":2} と {"b":2,"a":1} は同じデータとして扱われます。ただし、多くのJSON実装では記述順序が保持されることが多いです。順序が重要な場合は、配列を使用するか、明示的な順序フィールドを追加しましょう。
Q8. Pythonの json.loads() と json.load() の違いは何ですか?
json.loads()(末尾にsが付く)は文字列からJSONをパースします。json.load()(sなし)はファイルオブジェクトからJSONを読み込みます。同様に、json.dumps() は文字列を返し、json.dump() はファイルに書き込みます。「s」は「string」の略と覚えると間違えにくくなります。
Q9. JSONの数値で小数点以下の精度はどのくらいですか?
JSON仕様では数値の精度に制限を設けていませんが、実際にはJavaScriptの Number 型(IEEE 754 倍精度浮動小数点数)に基づいて処理されることが多く、約15〜17桁の有効数字が限界です。金額など高精度が必要な値は文字列として送り、受け取り側で適切に処理するのが安全です。
Q10. JSONの学習におすすめのリソースはありますか?
以下のリソースがおすすめです。公式仕様:json.org(JSONの公式サイト。仕様がシンプルにまとめられています)。MDN Web Docs:JSON.parse()やJSON.stringify()のリファレンス。JSON Schema公式サイト:json-schema.org(スキーマの学習に最適)。まずは小さなJSONデータを自分で書いてみて、JSONLintで検証しながら練習するのが上達への近道です。
まとめ
この記事では、JSONの基本から実践的な使い方まで幅広く解説しました。最後に要点を整理しておきましょう。
| 項目 | ポイント |
|---|---|
| JSONとは | 軽量で人間にも機械にも読みやすいデータ交換フォーマット |
| 基本構文 | オブジェクト({})と配列([])の組み合わせ。キーは必ずダブルクォーテーション |
| データ型 | 文字列、数値、真偽値、null、オブジェクト、配列の6種類 |
| XMLとの違い | JSONのほうが軽量・高速。XMLはコメントや名前空間が使える |
| 読み書き | JavaScript、Python、PHPすべてに標準ライブラリが用意されている |
| REST API | 現代のWeb APIはJSON形式が事実上の標準 |
| バリデーション | JSONLintなどのツールやJSON Schemaで構文・構造を検証 |
| 注意点 | セキュリティ(eval禁止)、パフォーマンス(サイズに注意)、命名規則の統一 |
JSONは一度覚えてしまえば非常にシンプルなフォーマットです。プログラミング初心者の方も、まずは小さなJSONデータを手書きで作成し、バリデーターで検証するところから始めてみてください。
Web開発、アプリ開発、データ分析など、あらゆるIT分野でJSONの知識は必ず役に立ちます。この記事がJSONを理解するきっかけになれば幸いです。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!