JSON(JavaScript Object Notation)は、構造化データを保存・交換するための軽量テキスト形式です。Web API の大多数、ほとんどのアプリ設定ファイル、無数のデータベースを支えています。REST API のレスポンスを見たり、package.json ファイルを開いたことがあるなら、すでに JSON を読んでいます。本ガイドは JSON とは何か、形式はどう見えるか、なぜデータ交換の共通言語になったかを説明します。
JSON とは?
JSON は JavaScript Object Notation の略。Douglas Crockford が 2000 年代初頭、Web サーバとブラウザ間のデータ交換における XML のシンプルな代替として作成しました。名前に「JavaScript」とありますが、JSON は言語非依存 —— すべての主要プログラミング言語が JSON パーサを内蔵しています。
形式は 2 つの国際標準で定義されています:IETF の RFC 8259(歴史と主な変更)と Ecma International の ECMA-404。両者が言うのは同 じこと:JSON は 6 つのデータ型のいずれかを表す Unicode 文字シーケンスで、UTF-8 エンコードされます。
JSON の 6 つのデータ型
JSON はちょうど 6 つの値型をサポートします。それらの理解が JSON 形式理解の基礎です。
1. オブジェクト(Object)
波括弧で囲まれた順不同のキー・値ペアの集まり。キーは文字列(ダブルクォート)でなければなりません。値は任意の JSON 型。
{
"name": "Alice",
"age": 30,
"active": true
}2. 配列(Array)
角括弧で囲まれた値の順序付きリスト。
["apple", "banana", "cherry"]3. 文字列(String)
ダブルクォート で囲まれた Unicode 文字シーケンス。シングルクォートは妥当な JSON ではありません。
"Hello, world!"4. 数値(Number)
整数または浮動小数点。JSON に整数と浮動の別型はありません —— number のみ。クォートなし、16 進リテラルなし、NaN や Infinity もなし。
42
3.14
-7
1.5e105. 真偽値(Boolean)
小文字の true か false のみ。JSON は True、False、yes、no、1、0 を真偽値として受け入れません。
true
false6. Null
値の不在を表す。小文字の null。
nullJSON ファイルとは?(と .json ファイル形式)
JSON ファイル(時々 jason file と打ち間違えられます)は単一の JSON 値を含むプレーンテキストファイル —— 多くはオブジェクトか配列。.json ファ イル形式は RFC 8259 に従う UTF-8 テキストで、慣習で .json 拡張子を使います。プレーンテキストなので特別なビューアは不要。
JSON(.json)ファイルの開き方:任意のテキストエディタでよい —— VS Code、Notepad、TextEdit、Sublime、nano。質問は多くの言い方で出回ります —— how to open json files、how to open a .json file、how do i open a json file、how do you open a json file、または単に open json file —— 答えは同じ:テキストとして開く。より読みやすいビューには、内容を JSON Viewer に貼って折りたたみツリーを見るか、JSON Fix ツールでフォーマット。macOS と Windows では .json をダブルクリックすると通常デフォルトのテキストエディタで開きます;ブラウザで開こうとしたら右クリック「開く」でエディタを選んでください。解凍ステップは不要 —— .json はアーカイブではありません。
JSON ファイルの作り方(「how to make a json file」とも):任意のテキストエディタを開き、単一の妥当な JSON 値(オブジェクト、配列、文字列、数値、真偽値、null)を書き、.json 拡張子で保存。これがすべて —— ヘッダ、スキーマ宣言、UTF-8 以外の必須エンコーディングマーカーはありません。プログラムは拡張子を認識した瞬間に JSON ファイル形式として読みます。小さな json file example:{ "name": "Ada", "active": true }。
JSON 形式とは?(関連検索 why files are stored in json format):JSON 形式は小さく、言語非依存のテキ スト形式で、キー、値、配列、オブジェクトと固定のリテラル型を持ちます。同じ文書を Python、Go、Java、JavaScript、Rust、データベースが翻訳なしに読めるためこの形式で保存されます —— JSON はシステム間で構造化データを運ぶ最大公約数です。
// users.json
[
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "editor" }
]おそらく既に出会った一般的な JSON ファイル:
package.json—— Node.js プロジェクトのメタデータと依存関係tsconfig.json—— TypeScript コンパイラ設定settings.json—— VS Code ユーザ設定manifest.json—— ブラウザ拡張または PWA の manifest
JSON データ形式とは?
JSON データ形式は、似て見える JavaScript コードと区別する厳しい規則をいくつか持ちます:
- すべてのキーはダブルクォートの文字列。
{ name: "Alice" }は JavaScript オブジェクトリテラル、JSON ではない。 - 文字列はダブルクォートを使う。
{ "name": 'Alice' }は無効な JSON。 - 末尾カンマなし。
{ "a": 1, }は無効な JSON。 - コメントなし。
// commentと/* block comment */は JSON で許されない。 undefinedなし。 JavaScript のundefinedに JSON の対応はない。代わりにnullを使う。
JSON vs. XML:JSON が勝った理由
JSON は XML と同じ?いいえ —— 両者とも構造化データを運びますが、形、サイズ、機構が異なります。JSON が引き継ぐ前、XML が標準のデータ交換形式でした。同じデータを両形式で:
<!-- XML -->
<user>
<name>Alice</name>
<age>30</age>
</user>
// JSON
{ "name": "Alice", "age": 30 }JSON はよりコンパクトで、人間にとって読みやすく、JavaScript でサードパーティ不要にネイティブにパース可能。多くのユースケース(API レスポンス、設定、メッセージング)で JSON は XML より大幅に帯域とコード量を節約します。
JSON が使われる場所
- REST API:
Content-Type: application/jsonヘッダがほぼすべての現代 Web API レスポンスに付く。 - 設定ファイル:
package.json、tsconfig.json、.eslintrc.json、AWS CloudFormation テンプレート。 - データベース: PostgreSQL、MySQL、MongoDB、DynamoDB は JSON カラムや文書のネイティブ保存・クエリをサポート。
- ログファイル: 構造化ロギング(JSON Lines)は Elasticsearch などの集約ツールでログデータをマシンパース可能に。
- プロセス間通信: マイクロサービス、メッセージキュー(Kafka、RabbitMQ)、サーバレス関数は JSON をデフォルトペイロード形式に。
データベースでの JSON
ほとんどの現代 DB は JSON を直接保存・クエリでき、文書が構造保持のために別の文書ストアに住む必要はありません:
- PostgreSQL —— 2 型:
jsonは原テキスト保存;jsonbは二進・索引可能な表現を 保存。->/->>でフィールド、@>で包含をクエリ;jsonbカラムに GIN インデックスでホットパスを索引化。 - MongoDB —— 文書がそのままJSON 風(ディスク上は BSON)。フィールド単位インデックスと完全な集約パイプラインが文書形に直接動作。
- SQLite —— JSON1 拡張(現代 SQLite に組み込み)が
json_extract、json_each、JSON フィールドからの生成列インデックスを提供。 - MySQL —— ネイティブ
JSONカラム型に加え、パス式と JSON 値を行として結合するJSON_TABLE。
どれにも適用される実用的な注意:大きな整数はクライアントドライバを経由して精度を失うことがあり、JSON 仕様はキーの正規順序を定義しません —— 決定的な比較やハッシュが必要なら RFC 8785(JCS) を使ってください。
一般的な JSON エラー
経験豊富な開発者でも無効な JSON を書きます。最もよくあるミス:
- 最後の要素後の末尾カンマ
- ダブルクォートでなくシングルクォート
- クォートなしキー
- JSON 内の JavaScript コメント
- Python 風の値、例:
True、False、None
JSON が正しくパースされないなら、オンラインで即座に修復 —— ツールはこれらの一般的問題を自動修復し、何を変更したかを正確に表示します。
コードでの JSON パース
すべての主要言語が JSON サポートを内蔵:
// JavaScript
const obj = JSON.parse('{"name":"Alice","age":30}');
console.log(obj.name); // "Alice"
# Python
import json
obj = json.loads('{"name":"Alice","age":30}')
print(obj['name']) # Alice
# Go
import "encoding/json"
var obj map[string]interface{}
json.Unmarshal([]byte(`{"name":"Alice","age":30}`), &obj)Python で JSON ファイルを読む方法(または read json file in python):ファイルパスには json.load(open('data.json'))、文字列なら json.loads(text)。両方とも構文エラーで json.JSONDecodeError を投げます。
現代のシステムで XML より JSON を選ぶ理由は通常、ワイヤ上のバイト数とパーササポートに帰着します —— すべての言語が JSON をネイティブにサポートし、XML は通常サードパーティが必要です。
出会う一般的な JSON 変種
厳格 JSON が基準ですが、密接に関連するいくつかの方言が頻繁に登場:
- JSONC(コメント付き JSON) ——
//と/* */コメント、末尾カンマを許す JSON。tsconfig.jsonと VS Code のsettings.jsonが使用。標準パーサは拒否;JSONC 対応パーサを使うか先にコメントを剥がしてください。 - NDJSON / JSON Lines —— 行ごとに 1 JSON 値、
\nで区切る。ストリーミングログ、ML データセット、バルク API に。各行をJSON.parseでパース、ファイル全体は一度にしない。 - JSON Pointer(RFC 6901)—— 文書内の値を指定するパス構文、例:
/users/0/name。JSON Patch と JSON Schema の$refが使う パス形式。
よくある質問
JSON は何の略?
JSON は JavaScript Object Notation の略。名前にも関わらず言語非依存 —— 主要言語はすべて読み書き可能 —— RFC 8259 と ECMA-404 で定義。
JSON のデータ型は?
6 つ:文字列、数値、真偽値、null、オブジェクト、配列。整数の別型なし、日付型なし、undefined なし。文脈での各例は JSON フォーマット例。
JSON と JavaScript オブジェクトは同じ?
いいえ。JSON は厳しい規則のテキスト形式(ダブルクォートキー、末尾カンマなし、コメントなし);JavaScript オブジェクトリテラルははるかに寛容なコードです。JSON vs JavaScript オブジェクト。
JSON が妥当か確認するには?
JSON.parse() でパース(無効な入力で投げる)、または How to Validate JSON に従って バリデータ を通す。構造と型を強制するには JSON Schema で記述してください。
JSON 操作のツール
- JSON Fix —— 無効な JSON を即座に検証、修復、フォーマット
- JSON Schema とは? —— JSON データの構造を記述・検証
- How to Format JSON —— JavaScript、Python、コマンドライン、ブラウザで pretty-print
- JSON フォーマット例 —— あらゆるデータ型と実 世界のパターンのコピペ可能な例
- JSON Diff —— 2 つの JSON 文書を比較して変更を確認
- YAML to JSON —— YAML 設定を JSON 形式に変換