プロフィール

開発用語Wiki

← 用語一覧に戻る

JSON

概要

**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個の回答を構成します)

  1. Q: JSON は何の略ですか?
  2. Q: JavaScript 以外の言語でも使えますか?
    • A: はい。言語に依存しないデータ形式なので、どのプログラミング言語でも使えます。
    • ソース: json.org
  3. Q: JSON で書けるデータの種類(型)は何ですか?
    • A: 文字列、数値、オブジェクト、配列、真偽値、null の 6 種類です。
    • ソース: ECMA-404 標準規格
  4. Q: コメントは書けますか?
  5. Q: 文字コードは何を使うべきですか?
    • A: ネットワークでやり取りする場合、原則として UTF-8 を使用します。
    • ソース: RFC 8259
  6. Q: XML との違いは何ですか?
    • A: JSON の方が書き方がシンプルでデータ量が少なく、解析が速いのが特徴です。
    • ソース: JSON vs XML (W3Schools)
  7. Q: 日付データはどうやって送りますか?
    • A: JSON には日付型がないため、一般的には ISO 8601 形式の文字列("2026-04-24T12:00:00Z" など)で送ります。
    • ソース: ISO 8601 Wikipedia
  8. Q: ファイルの拡張子は何ですか?
  9. Q: キー(名前)を囲むのはシングルクォートでもいいですか?
    • A: いいえ、必ずダブルクォート(")で囲む必要があります。
    • ソース: json.org
  10. Q: JSON のデータが正しいか確認する方法はありますか?
    • A: 「JSON Lint」などのバリデータを使うとチェックできます。
    • ソース: JSONLint
  11. Q: 数値の先頭に 0 をつけてもいいですか?(例: 0123)
    • A: いいえ、小数点以外の 0 から始まる数値は禁止されています。
    • ソース: RFC 8259 Section 6
  12. Q: 文字列の中で改行したい場合は?
  13. Q: MIME タイプは何ですか?
  14. Q: データの順序は保証されますか?
  15. Q: JSONP とは何ですか?
    • A: 昔、ドメインを越えてデータをやり取りするために使われた手法ですが、現在は CORS が推奨されています。
    • ソース: MDN - JSONP
  16. Q: 空のオブジェクトや配列は許されますか?
    • A: はい、{}[] は有効です。
    • ソース: RFC 8259
  17. Q: BOM(Byte Order Mark)は付けてもいいですか?
    • A: 実装上は推奨されず、受信側で無視するかエラーになることがあります。
    • ソース: RFC 8259 Section 8.1
  18. Q: キーに日本語は使えますか?
    • A: はい、文字列としてダブルクォートで囲めば使えます。
  19. Q: JSONSchema とは何ですか?
    • A: JSON のデータ構造を定義し、バリデーションするためのルールです。
    • ソース: JSON Schema 公式
  20. Q: NaNInfinity は使えますか?
    • A: いいえ、標準の JSON では使用できません。
    • ソース: RFC 8259 Section 6
  21. Q: データの最大サイズはありますか?
    • A: 仕様上の制限はありませんが、メモリ量に依存します。
  22. Q: なぜ XML より人気になったのですか?
    • A: JavaScript との親和性が高く、ブラウザでの処理が圧倒的に簡単だったからです。
  23. Q: JSON のシリアライズとは何ですか?
    • A: プログラム上のデータを JSON 形式の文字列に変換することです。
  24. Q: JSON のデシリアライズとは何ですか?
    • A: JSON 形式の文字列をプログラム上のオブジェクトに戻すことです。
  25. Q: YAML との関係は?
    • A: YAML は JSON のスーパーセットであり、より人間に読みやすい形式を目指しています。
  26. Q: JSON5 とは何ですか?
    • A: コメントや末尾のカンマを許可した、JSON を拡張した規格です。
    • ソース: JSON5 公式
  27. Q: 末尾のカンマは許されますか?
    • A: いいえ、標準の JSON ではエラーになります。
  28. Q: 16進数は書けますか?
    • A: いいえ、10進数のみです。
  29. Q: null と undefined の違いは?
    • A: JSON には null はありますが undefined はありません。
  30. Q: データの圧縮はできますか?
    • A: Gzip などを使って通信時に圧縮するのが一般的です。
  31. Q: JSON のパースとは?
    • A: 文字列を解析してデータ構造に展開することです。
  32. Q: セキュリティ上のリスクは?
    • A: eval() でパースすると悪意のあるコードを実行されるリスクがあります。JSON.parse() を使うべきです。
  33. Q: AJAX との関係は?
    • A: AJAX の後半の "X" は XML ですが、実際には JSON が使われることがほとんどです。
  34. Q: JSON 形式のログ出力は一般的ですか?
    • A: はい、構造化ログとしてクラウドでの分析に便利です。
  35. Q: ルート要素はオブジェクトである必要がありますか?
    • A: いいえ、配列や単一の数値・文字列でも有効な JSON です(RFC 7159 以降)。
  36. Q: プロトコルバッファ(Protobuf)との違いは?
    • A: Protobuf はバイナリ形式なので JSON より速いですが、人間には読めません。
  37. Q: JSON の中に JSON を入れられますか?
    • A: はい、文字列として入れるか、オブジェクトを入れ子にできます。
  38. Q: 大文字小文字は区別されますか?
    • A: はい、"Key""key" は別物です。
  39. Q: 循環参照(自分自身を指す構造)は保存できますか?
    • A: そのままではシリアライズできず、エラーになります。
  40. Q: BSON とは何ですか?
    • A: MongoDB で使われるバイナリ版の JSON です。
  41. Q: JSONL(JSON Lines)とは?
    • A: 1行に1つの JSON オブジェクトを書く形式で、巨大なログ処理に向いています。
    • ソース: JSON Lines 公式
  42. Q: 空白やタブ、改行はデータに影響しますか?
    • A: 文字列の外側であれば、無視されます。
  43. Q: {"a":1, "a":2} のようにキーが重複したら?
    • A: 仕様上は避けるべきですが、多くの場合、後の値が優先されます。
  44. Q: 数値の精度に限界はありますか?
    • A: IEEE 754 倍精度浮動小数点数の範囲(JavaScript の数値型)が一般的です。
  45. Q: 関数(Function)は送れますか?
    • A: いいえ、送れません。
  46. Q: JSON の誕生日は?
    • A: 最初のデモが行われたのは2001年4月頃と言われています。
  47. Q: true / false は引用符が必要ですか?
    • A: 不要です。引用符をつけると文字列になります。
  48. Q: 正規表現は送れますか?
    • A: いいえ、文字列として送る必要があります。
  49. Q: JSON データを整形(インデント)するには?
    • A: JavaScript なら JSON.stringify(obj, null, 2) とします。
  50. Q: ウェブブラウザでのネイティブサポートはいつから?
    • A: IE8 以降の主要ブラウザで window.JSON が導入されました。
  51. Q: GeoJSON とは何ですか?
    • A: 地理的な形状や位置情報を表現するための JSON 形式です。
  52. Q: JSON-LD とは何ですか?
    • A: データの意味を検索エンジンなどに伝えるための「リンクされたデータ」形式です。
  53. Q: 設定ファイルに JSON を使うデメリットは?
    • A: コメントが書けないため、理由を残しにくい点です。
  54. Q: application/javascript との違いは?
    • A: JSON は実行コードではなくデータであるという明確な区別があります。
  55. Q: cURL で JSON を送るには?
    • A: -H "Content-Type: application/json" -d '{"key":"val"}' のようにします。
  56. Q: なぜ .js ファイルに JSON を直接書かないのですか?
    • A: セキュリティと汎用性(他の言語でも読み込めるようにするため)です。
  57. Q: \u0000 などのユニコードエスケープは使えますか?
    • A: はい、使えます。
  58. Q: JSON データを受け取る標準的な API 形式は?
    • A: REST API が最も一般的です。
  59. Q: GraphQL と JSON の関係は?
    • A: GraphQL のレスポンスは通常 JSON 形式です。
  60. Q: データの機密性は?
    • A: JSON 自体に暗号化機能はないため、HTTPS(TLS)で保護します。
  61. Q: JSON の中にバイナリ(画像など)を入れたい場合は?
    • A: Base64 エンコードして文字列として入れます。
  62. Q: CSV との違いは?
    • A: JSON は階層構造(親子関係)を持てる点が優れています。
  63. Q: JSON インジェクションとは?
    • A: 入力値に JSON 構造を混ぜて、システムを誤動作させる攻撃です。
  64. Q: pnpmnpmpackage.json もこれ?
    • A: はい、その通りです。
  65. Q: JSONPath とは何ですか?
    • A: XPath のように、特定のデータだけを抽出するためのクエリ言語です。
  66. Q: null をキーにできますか?
    • A: キーは常に文字列である必要があるため、"null" という文字列になります。
  67. Q: 浮動小数点の 0.1 + 0.2 問題は JSON でも起きますか?
    • A: JSON 自体ではなく、パースする言語の数値処理の問題として発生します。
  68. Q: メタデータを含める推奨の方法は?
    • A: "_metadata": {...} のように、特定の接頭辞をつける慣習があります。
  69. Q: データのバリデーションを自動化するには?
    • A: Ajv などの JSON Schema バリデータライブラリを使います。
  70. Q: なぜ Douglas Crockford 氏は商用利用を制限した時期があった?
    • A: 「悪事には使わないこと」という条項をジョークで入れたため、法的混乱を招いたことがあります。
  71. Q: C# で JSON を扱うには?
    • A: System.Text.JsonNewtonsoft.Json を使います。
  72. Q: Python で JSON を扱うには?
    • A: 標準ライブラリの json モジュールを使います。
  73. Q: Go 言語で JSON を扱うには?
    • A: encoding/json パッケージを使います。
  74. Q: JSON データを Excel で開けますか?
    • A: 最近の Excel は「データの取得」機能で JSON をインポートできます。
  75. Q: application/json-patch+json とは何ですか?
    • A: データの差分(変更箇所)だけを送るための形式です。
  76. Q: JSON の「オブジェクト」は「連想配列」と同じ?
    • A: プログラミング言語によって呼び方が変わりますが、概念は同じです。
  77. Q: \b\f のエスケープの意味は?
    • A: バックスペースやフォームフィードなど、古い制御文字です。
  78. Q: JSON の中に HTML を入れても安全?
    • A: <> を適切にエスケープしないと、XSS の原因になります。
  79. Q: 数値にクォートをつけるとどうなる?
    • A: 文字列データとして扱われます。
  80. Q: JSON ファイルにメタデータを追加する標準は?
    • A: 特にありませんが、トップレベルにプロパティを作るのが一般的です。
  81. Q: 巨大な JSON を読み込むとメモリが足りない場合は?
    • A: ストリームパース(逐次読み込み)を行います。
  82. Q: jq コマンドとは?
    • A: ターミナルで JSON を加工・抽出するための強力なツールです。
  83. Q: JSON データの diff(比較)をするには?
    • A: jd コマンドやオンラインの JSON diff ツールを使います。
  84. Q: 予約語はありますか?
    • A: true, false, null の 3 つです。
  85. Q: \r は必要ですか?
    • A: 改行コードとして \n または \r\n が許容されます。
  86. Q: 型変換(数値→文字列など)は自動で行われますか?
    • A: パース側のプログラムの実装に依存します。
    • ソース: JSON 公式
  87. Q: JSON を使った通信はバイナリ通信より遅い?
    • A: テキストなので少しデータ量は増えますが、人間がデバッグしやすいメリットがあります。
  88. Q: JSON のバージョンアップはありますか?
    • A: 基本的には完成された仕様なので、大きな変更は行われません。
  89. Q: [1, 2, ] はエラー?
    • A: はい、最後のカンマは削除しなければなりません。
  90. Q: {"key": } のように値を空にできる?
    • A: いいえ、必ず何らかの値(null など)が必要です。
  91. Q: JSON はデータベースの代わりになりますか?
    • A: 小さな設定なら十分ですが、検索や更新の頻度が高いなら D1 などの DB を使うべきです。
  92. Q: TypeScript で JSON の型を定義するには?
    • A: interfacetype を使い、JSON データの構造を定義します。
  93. Q: ブラウザのデベロッパーツールで JSON は見れる?
    • A: 「ネットワーク」タブでレスポンスを整形して見ることができます。
  94. Q: JSON データの美化(Minify)の目的は?
    • A: 不要な余白を消して、通信速度を少しでも上げるためです。
  95. Q: Node.js で .jsonrequire() できる?
    • A: はい、自動的にオブジェクトとして読み込まれます。
  96. Q: JSON は「ステートレス」ですか?
    • A: はい、データそのものに状態はありません。
  97. Q: JSON の仕様書はどこで読める?
    • A: IETF の RFC 8259 や ECMA-404 です。
  98. Q: 日本の政府統計(e-Stat)も JSON で取れる?
    • A: はい、API が提供されています。
  99. Q: JSON を使わないほうがいいケースは?
    • A: 非常に高頻度で微細なデータを送るゲームの通信など(バイナリの方が効率的)。
  100. 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 形式の通知データを解析し、データベースに保存する処理を行っています。
← 用語一覧に戻る