概要
**JSON(JavaScript Object Notation)**は、人間にとっても読みやすく、コンピュータにとっても処理しやすいデータの書き方です。
名前に「JavaScript」と入っていますが、今では Python や PHP、Java など、ほぼすべてのプログラミング言語で使うことができます。ウェブサイトの情報をサーバーから受け取ったり、設定ファイルを保存したりするときに最もよく使われる形式です。
詳しくは JSON 公式サイト(json.org) を参照してください。
詳しい説明
成り立ちと歴史
JSON は、2000年代の初めに ダグラス・クロックフォード(Douglas Crockford) 氏によって指定されました。
それまでは、データをやり取りするために XML という形式がよく使われていました。しかし、XML はタグ(<name>~</name> など)が多く、文字数がかさむため、もっと軽くてシンプルな方法として JSON が広まりました。2013年には国際的な標準規格(ECMA-404)として定義されています。
どういうときに使うのか
主に以下のような場面で使われます。
- ウェブサービスのデータ交換: 天気予報のデータや SNS の投稿一覧をサーバーから取得するとき。
- 設定ファイル: アプリケーションの動きを決める設定を保存するとき。
- データベース: MongoDB などの「ドキュメント指向」と呼ばれるデータベースでのデータ保存。
jsonに関する100の質問
(※ここでは代表的かつ重要な質問から順に100個の回答を構成します)
- Q: JSON は何の略ですか?
- A: JavaScript Object Notation の略です。
- ソース: MDN Web Docs - JSON の紹介
- Q: JavaScript 以外の言語でも使えますか?
- A: はい。言語に依存しないデータ形式なので、どのプログラミング言語でも使えます。
- ソース: json.org
- Q: JSON で書けるデータの種類(型)は何ですか?
- A: 文字列、数値、オブジェクト、配列、真偽値、null の 6 種類です。
- ソース: ECMA-404 標準規格
- Q: コメントは書けますか?
- A: 公式な仕様では、JSON の中にコメントを書くことはできません。
- ソース: Douglas Crockford 氏のコメントに関する説明
- Q: 文字コードは何を使うべきですか?
- A: ネットワークでやり取りする場合、原則として UTF-8 を使用します。
- ソース: RFC 8259
- Q: XML との違いは何ですか?
- A: JSON の方が書き方がシンプルでデータ量が少なく、解析が速いのが特徴です。
- ソース: JSON vs XML (W3Schools)
- Q: 日付データはどうやって送りますか?
- A: JSON には日付型がないため、一般的には ISO 8601 形式の文字列("2026-04-24T12:00:00Z" など)で送ります。
- ソース: ISO 8601 Wikipedia
- Q: ファイルの拡張子は何ですか?
- A:
.jsonです。 - ソース: MDN Web Docs - JSON
- A:
- Q: キー(名前)を囲むのはシングルクォートでもいいですか?
- A: いいえ、必ずダブルクォート(
")で囲む必要があります。 - ソース: json.org
- A: いいえ、必ずダブルクォート(
- Q: JSON のデータが正しいか確認する方法はありますか?
- A: 「JSON Lint」などのバリデータを使うとチェックできます。
- ソース: JSONLint
- Q: 数値の先頭に 0 をつけてもいいですか?(例: 0123)
- A: いいえ、小数点以外の 0 から始まる数値は禁止されています。
- ソース: RFC 8259 Section 6
- Q: 文字列の中で改行したい場合は?
- A:
\nのようなエスケープ文字を使います。 - ソース: json.org エスケープルール
- A:
- Q: MIME タイプは何ですか?
- A:
application/jsonです。 - ソース: IANA Media Types
- A:
- Q: データの順序は保証されますか?
- A: 配列は保証されますが、オブジェクト内のキーの順序は保証されません。
- ソース: ECMA-404 オブジェクト定義
- Q: JSONP とは何ですか?
- A: 昔、ドメインを越えてデータをやり取りするために使われた手法ですが、現在は CORS が推奨されています。
- ソース: MDN - JSONP
- Q: 空のオブジェクトや配列は許されますか?
- A: はい、
{}や[]は有効です。 - ソース: RFC 8259
- A: はい、
- Q: BOM(Byte Order Mark)は付けてもいいですか?
- A: 実装上は推奨されず、受信側で無視するかエラーになることがあります。
- ソース: RFC 8259 Section 8.1
- Q: キーに日本語は使えますか?
- A: はい、文字列としてダブルクォートで囲めば使えます。
- Q: JSONSchema とは何ですか?
- A: JSON のデータ構造を定義し、バリデーションするためのルールです。
- ソース: JSON Schema 公式
- Q:
NaNやInfinityは使えますか?- A: いいえ、標準の JSON では使用できません。
- ソース: RFC 8259 Section 6
- Q: データの最大サイズはありますか?
- A: 仕様上の制限はありませんが、メモリ量に依存します。
- Q: なぜ XML より人気になったのですか?
- A: JavaScript との親和性が高く、ブラウザでの処理が圧倒的に簡単だったからです。
- Q: JSON のシリアライズとは何ですか?
- A: プログラム上のデータを JSON 形式の文字列に変換することです。
- Q: JSON のデシリアライズとは何ですか?
- A: JSON 形式の文字列をプログラム上のオブジェクトに戻すことです。
- Q: YAML との関係は?
- A: YAML は JSON のスーパーセットであり、より人間に読みやすい形式を目指しています。
- Q: JSON5 とは何ですか?
- A: コメントや末尾のカンマを許可した、JSON を拡張した規格です。
- ソース: JSON5 公式
- Q: 末尾のカンマは許されますか?
- A: いいえ、標準の JSON ではエラーになります。
- Q: 16進数は書けますか?
- A: いいえ、10進数のみです。
- Q: null と undefined の違いは?
- A: JSON には
nullはありますがundefinedはありません。
- A: JSON には
- Q: データの圧縮はできますか?
- A: Gzip などを使って通信時に圧縮するのが一般的です。
- Q: JSON のパースとは?
- A: 文字列を解析してデータ構造に展開することです。
- Q: セキュリティ上のリスクは?
- A:
eval()でパースすると悪意のあるコードを実行されるリスクがあります。JSON.parse()を使うべきです。
- A:
- Q: AJAX との関係は?
- A: AJAX の後半の "X" は XML ですが、実際には JSON が使われることがほとんどです。
- Q: JSON 形式のログ出力は一般的ですか?
- A: はい、構造化ログとしてクラウドでの分析に便利です。
- Q: ルート要素はオブジェクトである必要がありますか?
- A: いいえ、配列や単一の数値・文字列でも有効な JSON です(RFC 7159 以降)。
- Q: プロトコルバッファ(Protobuf)との違いは?
- A: Protobuf はバイナリ形式なので JSON より速いですが、人間には読めません。
- Q: JSON の中に JSON を入れられますか?
- A: はい、文字列として入れるか、オブジェクトを入れ子にできます。
- Q: 大文字小文字は区別されますか?
- A: はい、
"Key"と"key"は別物です。
- A: はい、
- Q: 循環参照(自分自身を指す構造)は保存できますか?
- A: そのままではシリアライズできず、エラーになります。
- Q: BSON とは何ですか?
- A: MongoDB で使われるバイナリ版の JSON です。
- Q: JSONL(JSON Lines)とは?
- A: 1行に1つの JSON オブジェクトを書く形式で、巨大なログ処理に向いています。
- ソース: JSON Lines 公式
- Q: 空白やタブ、改行はデータに影響しますか?
- A: 文字列の外側であれば、無視されます。
- Q:
{"a":1, "a":2}のようにキーが重複したら?- A: 仕様上は避けるべきですが、多くの場合、後の値が優先されます。
- Q: 数値の精度に限界はありますか?
- A: IEEE 754 倍精度浮動小数点数の範囲(JavaScript の数値型)が一般的です。
- Q: 関数(Function)は送れますか?
- A: いいえ、送れません。
- Q: JSON の誕生日は?
- A: 最初のデモが行われたのは2001年4月頃と言われています。
- Q:
true/falseは引用符が必要ですか?- A: 不要です。引用符をつけると文字列になります。
- Q: 正規表現は送れますか?
- A: いいえ、文字列として送る必要があります。
- Q: JSON データを整形(インデント)するには?
- A: JavaScript なら
JSON.stringify(obj, null, 2)とします。
- A: JavaScript なら
- Q: ウェブブラウザでのネイティブサポートはいつから?
- A: IE8 以降の主要ブラウザで
window.JSONが導入されました。
- A: IE8 以降の主要ブラウザで
- Q: GeoJSON とは何ですか?
- A: 地理的な形状や位置情報を表現するための JSON 形式です。
- Q: JSON-LD とは何ですか?
- A: データの意味を検索エンジンなどに伝えるための「リンクされたデータ」形式です。
- Q: 設定ファイルに JSON を使うデメリットは?
- A: コメントが書けないため、理由を残しにくい点です。
- Q:
application/javascriptとの違いは?- A: JSON は実行コードではなくデータであるという明確な区別があります。
- Q: cURL で JSON を送るには?
- A:
-H "Content-Type: application/json" -d '{"key":"val"}'のようにします。
- A:
- Q: なぜ .js ファイルに JSON を直接書かないのですか?
- A: セキュリティと汎用性(他の言語でも読み込めるようにするため)です。
- Q:
\u0000などのユニコードエスケープは使えますか?- A: はい、使えます。
- Q: JSON データを受け取る標準的な API 形式は?
- A: REST API が最も一般的です。
- Q: GraphQL と JSON の関係は?
- A: GraphQL のレスポンスは通常 JSON 形式です。
- Q: データの機密性は?
- A: JSON 自体に暗号化機能はないため、HTTPS(TLS)で保護します。
- Q: JSON の中にバイナリ(画像など)を入れたい場合は?
- A: Base64 エンコードして文字列として入れます。
- Q: CSV との違いは?
- A: JSON は階層構造(親子関係)を持てる点が優れています。
- Q: JSON インジェクションとは?
- A: 入力値に JSON 構造を混ぜて、システムを誤動作させる攻撃です。
- Q:
pnpmやnpmのpackage.jsonもこれ?- A: はい、その通りです。
- Q: JSONPath とは何ですか?
- A: XPath のように、特定のデータだけを抽出するためのクエリ言語です。
- Q:
nullをキーにできますか?- A: キーは常に文字列である必要があるため、
"null"という文字列になります。
- A: キーは常に文字列である必要があるため、
- Q: 浮動小数点の
0.1 + 0.2問題は JSON でも起きますか?- A: JSON 自体ではなく、パースする言語の数値処理の問題として発生します。
- Q: メタデータを含める推奨の方法は?
- A:
"_metadata": {...}のように、特定の接頭辞をつける慣習があります。
- A:
- Q: データのバリデーションを自動化するには?
- A: Ajv などの JSON Schema バリデータライブラリを使います。
- Q: なぜ Douglas Crockford 氏は商用利用を制限した時期があった?
- A: 「悪事には使わないこと」という条項をジョークで入れたため、法的混乱を招いたことがあります。
- Q: C# で JSON を扱うには?
- A:
System.Text.JsonやNewtonsoft.Jsonを使います。
- A:
- Q: Python で JSON を扱うには?
- A: 標準ライブラリの
jsonモジュールを使います。
- A: 標準ライブラリの
- Q: Go 言語で JSON を扱うには?
- A:
encoding/jsonパッケージを使います。
- A:
- Q: JSON データを Excel で開けますか?
- A: 最近の Excel は「データの取得」機能で JSON をインポートできます。
- Q:
application/json-patch+jsonとは何ですか?- A: データの差分(変更箇所)だけを送るための形式です。
- Q: JSON の「オブジェクト」は「連想配列」と同じ?
- A: プログラミング言語によって呼び方が変わりますが、概念は同じです。
- Q:
\bや\fのエスケープの意味は?- A: バックスペースやフォームフィードなど、古い制御文字です。
- Q: JSON の中に HTML を入れても安全?
- A:
<や>を適切にエスケープしないと、XSS の原因になります。
- A:
- Q: 数値にクォートをつけるとどうなる?
- A: 文字列データとして扱われます。
- Q: JSON ファイルにメタデータを追加する標準は?
- A: 特にありませんが、トップレベルにプロパティを作るのが一般的です。
- Q: 巨大な JSON を読み込むとメモリが足りない場合は?
- A: ストリームパース(逐次読み込み)を行います。
- Q:
jqコマンドとは?- A: ターミナルで JSON を加工・抽出するための強力なツールです。
- Q: JSON データの diff(比較)をするには?
- A:
jdコマンドやオンラインの JSON diff ツールを使います。
- A:
- Q: 予約語はありますか?
- A:
true,false,nullの 3 つです。
- A:
- Q:
\rは必要ですか?- A: 改行コードとして
\nまたは\r\nが許容されます。
- A: 改行コードとして
- Q: 型変換(数値→文字列など)は自動で行われますか?
- A: パース側のプログラムの実装に依存します。
- ソース: JSON 公式
- Q: JSON を使った通信はバイナリ通信より遅い?
- A: テキストなので少しデータ量は増えますが、人間がデバッグしやすいメリットがあります。
- Q: JSON のバージョンアップはありますか?
- A: 基本的には完成された仕様なので、大きな変更は行われません。
- Q:
[1, 2, ]はエラー?- A: はい、最後のカンマは削除しなければなりません。
- Q:
{"key": }のように値を空にできる?- A: いいえ、必ず何らかの値(
nullなど)が必要です。
- A: いいえ、必ず何らかの値(
- Q: JSON はデータベースの代わりになりますか?
- A: 小さな設定なら十分ですが、検索や更新の頻度が高いなら D1 などの DB を使うべきです。
- Q: TypeScript で JSON の型を定義するには?
- A:
interfaceやtypeを使い、JSON データの構造を定義します。
- A:
- Q: ブラウザのデベロッパーツールで JSON は見れる?
- A: 「ネットワーク」タブでレスポンスを整形して見ることができます。
- Q: JSON データの美化(Minify)の目的は?
- A: 不要な余白を消して、通信速度を少しでも上げるためです。
- Q: Node.js で
.jsonをrequire()できる?- A: はい、自動的にオブジェクトとして読み込まれます。
- Q: JSON は「ステートレス」ですか?
- A: はい、データそのものに状態はありません。
- Q: JSON の仕様書はどこで読める?
- A: IETF の RFC 8259 や ECMA-404 です。
- Q: 日本の政府統計(e-Stat)も JSON で取れる?
- A: はい、API が提供されています。
- Q: JSON を使わないほうがいいケースは?
- A: 非常に高頻度で微細なデータを送るゲームの通信など(バイナリの方が効率的)。
- Q: これから JSON に代わるものは出てくる? - A: 特定の用途では CBOR や Protobuf が使われますが、汎用データ形式としては JSON の天下が続くでしょう。
まとめ
JSON は、データの「中身」だけを効率よく伝えるための世界共通のルールです。書き方がとてもシンプルなので、プログラミングを始めたばかりの人でもすぐに理解でき、現代のインターネットを支える非常に重要な技術となっています。
このサイトでの使われ方
このサイトの構成において、JSON は心臓部と言える役割を果たしています。
- 設定の管理: プロジェクトルートにある
package.jsonで使っているライブラリを管理し、wrangler.jsoncで Cloudflare の設定(D1 データベースや環境変数のバインディング)を記述しています。 - API レスポンス:
src/pages/api/posts.tsなどの API エンドポイントでは、データベースから取得した投稿データを JSON 形式に変換してフロントエンドに返しています。 - データの受け取り: Webhook(
src/pages/api/webhook.ts)では、Slack や外部サービスから送られてくる JSON 形式の通知データを解析し、データベースに保存する処理を行っています。