読み込み中...

ふわふわコード
JSONAPIデータ形式初心者向け

JSONってなに?データ形式の基本をわかりやすく解説

ふわふわコード
25分
初心者向け
2026年2月22日更新

JSONってなに?データ形式の基本をわかりやすく解説

はじめに

プログラミングを学んでいると、必ず出会うのがJSON(ジェイソン)です。

  • APIからデータを取得したら、返ってきたのがJSON
  • 設定ファイルを開いたら、中身がJSON
  • AIにリクエストを送るときも、JSON
  • 「なんとなく見たことあるけど、ちゃんと理解していない...」という方も多いのではないでしょうか。

    この記事では、JSONの基本ルールから実際のコードでの使い方まで、初心者の方にもわかりやすく丁寧に解説します。この記事を読み終えるころには、JSONを自信を持って読み書きできるようになります。


    JSONとは何か?

    正式名称

    JSON = JavaScript Object Notation(ジャバスクリプト・オブジェクト・ノーテーション)

    名前に「JavaScript」と入っていますが、JavaScriptだけのものではありません。Python、Java、Go、Ruby、PHPなど、ほぼすべてのプログラミング言語で使える、世界標準のデータ形式です。

    一言でいうと

    データをテキストで表現するための書き方のルールです。

    たとえば、「田中太郎さん、25歳、東京在住」という情報をJSONで書くと、こうなります:

    1{
    2  "name": "田中太郎",
    3  "age": 25,
    4  "city": "東京"
    5}

    人間が読んでも意味がわかるし、プログラムでも簡単に処理できる。これがJSONの大きな特徴です。


    どこでJSONに出会う?

    JSONは、現代のプログラミングであらゆる場面に登場します。具体的には以下のような場面です。

    1. APIのレスポンス

    Webサービスからデータを取得すると、ほとんどの場合JSONが返ってきます。天気予報API、SNSのAPI、AIのAPIなど、すべてJSONです。

    2. 設定ファイル

  • package.json --- Node.jsプロジェクトの設定ファイル
  • tsconfig.json --- TypeScriptの設定ファイル
  • VS Codeの settings.json --- エディタの設定ファイル
  • 3. データの保存・通信

    プログラム間でデータをやりとりするときの「共通語」として使われます。フロントエンド(ブラウザ)とバックエンド(サーバー)の通信でも、JSONが標準です。

    4. AIとの連携

    OpenAI APIやClaude APIに送るリクエストも、返ってくるレスポンスも、すべてJSON形式です。バイブコーディングをする上でも、JSONの理解は欠かせません。


    JSONの基本ルール

    JSONにはいくつかの厳密なルールがあります。ここをしっかり押さえておけば、エラーに悩まされることが大幅に減ります。

    ルール1:オブジェクト(Object)

    波括弧 `{}` で囲み、「キー: 値」のペアを書きます。

    1{
    2  "name": "田中太郎",
    3  "age": 25,
    4  "isStudent": false
    5}
  • キーは必ずダブルクォート(")で囲む
  • キーと値の間はコロン(:)で区切る
  • ペアとペアの間はカンマ(,)で区切る
  • ルール2:配列(Array)

    角括弧 `[]` で囲み、値をカンマ区切りで並べます。

    1{
    2  "fruits": ["りんご", "バナナ", "みかん"],
    3  "scores": [85, 92, 78]
    4}

    配列の中にオブジェクトを入れることもできます:

    1{
    2  "users": [
    3    { "name": "田中", "age": 25 },
    4    { "name": "鈴木", "age": 30 },
    5    { "name": "佐藤", "age": 22 }
    6  ]
    7}

    ルール3:使えるデータ型は6種類

    JSONで使えるデータ型は、以下の6つだけです。

    データ型例説明
    文字列(string)"こんにちは"ダブルクォートで囲む
    数値(number)42, 3.14整数・小数どちらもOK
    真偽値(boolean)true, falseすべて小文字
    nullnull「値がない」を表す。小文字
    オブジェクト(object){ "key": "value" }波括弧で囲む
    配列(array)[1, 2, 3]角括弧で囲む

    ルール4:ダブルクォートのみ

    JSONでは文字列やキーに使えるのはダブルクォート(`"`)だけです。

    1// NG: シングルクォートは使えない
    2{ 'name': 'Taro' }
    3
    4// OK: ダブルクォートを使う
    5{ "name": "Taro" }

    Pythonではシングルクォートもダブルクォートも使えますが、JSONでは必ずダブルクォートです。ここは非常によく間違えるポイントです。

    ルール5:末尾カンマは禁止

    最後の要素のあとにカンマを付けてはいけません。

    1// NG: 末尾カンマ
    2{
    3  "name": "田中",
    4  "age": 25,
    5}
    6
    7// OK: 末尾カンマなし
    8{
    9  "name": "田中",
    10  "age": 25
    11}

    JavaScriptやPythonでは末尾カンマが許されますが、JSONでは厳禁です。

    ルール6:コメントは書けない

    JSONにはコメント機能がありません。

    1// NG: コメントは書けない
    2{
    3  "name": "田中",  // ユーザー名
    4  "age": 25        /* 年齢 */
    5}

    上の例は説明のために // NG と書いていますが、実際のJSONファイルにコメントを書くとエラーになります。どうしてもコメントを残したい場合は、次のようにダミーのキーを使うことがあります(あまり推奨されませんが)。

    1{
    2  "_comment": "これはユーザー情報です",
    3  "name": "田中",
    4  "age": 25
    5}

    ただし、tsconfig.json や settings.json など一部のファイルは「JSONC」(JSON with Comments)形式で、コメントが許可されています。これはJSON本来の仕様ではなく、ツール側が独自に対応しているものです。


    実際のJSONを見てみよう

    実際にどんなJSONが使われているか、具体例を見てみましょう。

    例1:天気予報APIのレスポンス

    1{
    2  "location": {
    3    "city": "東京",
    4    "country": "日本"
    5  },
    6  "current": {
    7    "temperature": 22.5,
    8    "humidity": 65,
    9    "description": "晴れ時々曇り",
    10    "wind_speed": 3.2
    11  },
    12  "forecast": [
    13    {
    14      "date": "2026-02-23",
    15      "high": 24,
    16      "low": 15,
    17      "description": "晴れ"
    18    },
    19    {
    20      "date": "2026-02-24",
    21      "high": 20,
    22      "low": 12,
    23      "description": "曇りのち雨"
    24    }
    25  ]
    26}

    オブジェクトの中にオブジェクトがあったり、配列の中にオブジェクトがあったり、入れ子(ネスト)の構造になっています。最初は複雑に見えますが、一つずつ分解して読めば理解できます。

  • location --- 場所のオブジェクト
  • current --- 現在の天気のオブジェクト
  • forecast --- 予報の配列(複数日分のオブジェクトが並んでいる)
  • 例2:ユーザープロフィール

    1{
    2  "id": 12345,
    3  "username": "tanaka_taro",
    4  "email": "taro@example.com",
    5  "profile": {
    6    "display_name": "田中太郎",
    7    "bio": "Webエンジニア3年目。Pythonが好きです。",
    8    "avatar_url": "https://example.com/avatars/12345.png"
    9  },
    10  "settings": {
    11    "language": "ja",
    12    "theme": "dark",
    13    "notifications": true
    14  },
    15  "tags": ["Python", "Web", "AI"],
    16  "created_at": "2025-04-15T10:30:00Z"
    17}

    例3:OpenAI APIのレスポンス

    AIを使ったことがある方は、こんなJSONを見たことがあるかもしれません。

    1{
    2  "id": "chatcmpl-abc123",
    3  "object": "chat.completion",
    4  "created": 1709000000,
    5  "model": "gpt-4o",
    6  "choices": [
    7    {
    8      "index": 0,
    9      "message": {
    10        "role": "assistant",
    11        "content": "JSONとは、データを構造的に表現するためのテキスト形式です。"
    12      },
    13      "finish_reason": "stop"
    14    }
    15  ],
    16  "usage": {
    17    "prompt_tokens": 15,
    18    "completion_tokens": 30,
    19    "total_tokens": 45
    20  }
    21}

    AIのレスポンスも、すべてJSONで返ってきます。choices[0].message.content に実際の回答テキストが入っているのが読み取れるでしょうか。このようにJSONの構造がわかれば、APIの結果から必要なデータを取り出す方法が理解できます。


    PythonでJSONを扱う

    Pythonには標準ライブラリに json モジュールが用意されています。追加のインストールは不要です。

    基本:文字列から辞書に変換(json.loads)

    APIからJSONの文字列を受け取ったとき、Pythonの辞書(dict)に変換します。

    1import json
    2
    3# JSON文字列
    4json_string = '{"name": "田中太郎", "age": 25, "city": "東京"}'
    5
    6# JSON文字列 → Python辞書
    7data = json.loads(json_string)
    8
    9print(data["name"])   # 田中太郎
    10print(data["age"])    # 25
    11print(type(data))     # <class 'dict'>

    json.loads() の s は「string(文字列)」の意味です。文字列を読み込む(load)ので loads です。

    基本:辞書からJSON文字列に変換(json.dumps)

    逆に、Pythonの辞書をJSON文字列に変換します。

    1import json
    2
    3# Python辞書
    4data = {
    5    "name": "田中太郎",
    6    "age": 25,
    7    "city": "東京"
    8}
    9
    10# Python辞書 → JSON文字列
    11json_string = json.dumps(data)
    12print(json_string)
    13# {"name": "\u7530\u4e2d\u592a\u90ce", "age": 25, "city": "\u6771\u4eac"}

    日本語が \uXXXX のようにエスケープされてしまいました。これを防ぐには ensure_ascii=False を指定します。

    1json_string = json.dumps(data, ensure_ascii=False)
    2print(json_string)
    3# {"name": "田中太郎", "age": 25, "city": "東京"}

    見やすく整形する(indent)

    indent を指定すると、改行とインデント付きで見やすく出力できます。

    1json_string = json.dumps(data, ensure_ascii=False, indent=2)
    2print(json_string)

    出力:

    1{
    2  "name": "田中太郎",
    3  "age": 25,
    4  "city": "東京"
    5}

    デバッグやログ出力のときにとても便利です。

    JSONファイルの読み込み(json.load)

    ファイルに保存されたJSONを読み込むには json.load()(s なし)を使います。

    1import json
    2
    3# JSONファイルを読み込む
    4with open("data.json", "r", encoding="utf-8") as f:
    5    data = json.load(f)
    6
    7print(data["name"])

    loads は文字列から、load はファイルから、と覚えましょう。

    JSONファイルへの書き出し(json.dump)

    Pythonのデータをファイルに保存するには json.dump()(s なし)を使います。

    1import json
    2
    3data = {
    4    "name": "田中太郎",
    5    "age": 25,
    6    "scores": [85, 92, 78]
    7}
    8
    9# JSONファイルに書き出す
    10with open("output.json", "w", encoding="utf-8") as f:
    11    json.dump(data, f, ensure_ascii=False, indent=2)

    これで output.json というファイルに、整形されたJSONが保存されます。

    メソッドの使い分けまとめ

    メソッド方向対象
    json.loads()JSON文字列 → Python辞書文字列(string)
    json.dumps()Python辞書 → JSON文字列文字列(string)
    json.load()JSONファイル → Python辞書ファイル(file)
    json.dump()Python辞書 → JSONファイルファイル(file)

    s が付くかどうかで、文字列かファイルかが決まります。


    JavaScriptでJSONを扱う

    JavaScriptではさらに簡単にJSONを扱えます。専用のグローバルオブジェクト JSON が最初から用意されています。

    JSON文字列をオブジェクトに変換(JSON.parse)

    1const jsonString = '{"name": "田中太郎", "age": 25}';
    2
    3const data = JSON.parse(jsonString);
    4
    5console.log(data.name);  // 田中太郎
    6console.log(data.age);   // 25

    オブジェクトをJSON文字列に変換(JSON.stringify)

    1const data = {
    2  name: "田中太郎",
    3  age: 25,
    4  city: "東京"
    5};
    6
    7const jsonString = JSON.stringify(data);
    8console.log(jsonString);
    9// {"name":"田中太郎","age":25,"city":"東京"}
    10
    11// 見やすく整形する場合(第3引数にインデント幅を指定)
    12const pretty = JSON.stringify(data, null, 2);
    13console.log(pretty);

    JSON.stringify の第2引数は変換対象のフィルタ(通常は null)、第3引数はインデント幅です。

    JavaScriptでの注意点

    JavaScriptのオブジェクトとJSONは見た目が似ていますが、別のものです。

    1// JavaScript のオブジェクト(JSONではない)
    2const obj = { name: "田中", age: 25 };
    3
    4// JSON 文字列(文字列であることに注意)
    5const json = '{"name": "田中", "age": 25}';

    JavaScriptのオブジェクトではキーにクォートが不要ですが、JSONでは必ずダブルクォートが必要です。


    JSON と Pythonの辞書の違い

    PythonでJSONを扱うとき、最もハマりやすいのがJSONとPython辞書の微妙な違いです。変換時に自動で切り替わりますが、自分で書くときに混同しやすいポイントをまとめます。

    項目JSONPython
    真(true)trueTrue
    偽(false)falseFalse
    空値(null)nullNone
    文字列のクォート" のみ" でも ' でもOK
    末尾カンマ禁止許可
    キーの型文字列のみ文字列以外もOK
    コメント不可# で可能

    よくある間違いの例

    1import json
    2
    3# NG: Pythonの書き方をそのままJSON文字列にしてしまう
    4bad_json = "{'name': 'Taro', 'active': True, 'data': None}"
    5# json.loads(bad_json)  # エラーになる!
    6
    7# OK: 正しいJSON
    8good_json = '{"name": "Taro", "active": true, "data": null}'
    9data = json.loads(good_json)
    10print(data)
    11# {'name': 'Taro', 'active': True, 'data': None}

    json.loads() を使えばJSON → Pythonの変換は自動で行われます(true → True、null → None)。しかし、自分でJSON文字列を手書きするときは、JSONのルールに従う必要があります。


    よくあるミスと対処法

    JSONを扱うときにつまずきやすいポイントを、エラーメッセージと一緒に紹介します。

    ミス1:末尾カンマ

    1import json
    2
    3# 末尾カンマがあるとエラー
    4bad = '{"name": "田中", "age": 25,}'
    5json.loads(bad)
    6# json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes

    対処法: 最後の要素のあとのカンマを削除してください。

    ミス2:シングルクォート

    1import json
    2
    3# シングルクォートはJSONでは無効
    4bad = "{'name': '田中'}"
    5json.loads(bad)
    6# json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes

    対処法: すべてのクォートをダブルクォートに変更してください。

    ミス3:True / False / None(大文字始まり)

    1import json
    2
    3# Pythonの True/False/None はJSONでは無効
    4bad = '{"active": True, "data": None}'
    5json.loads(bad)
    6# json.decoder.JSONDecodeError: Expecting value

    対処法: JSONでは true、false、null(すべて小文字)を使います。

    ミス4:途中でデータが切れている

    1import json
    2
    3# 閉じ括弧が足りない
    4bad = '{"name": "田中", "items": [1, 2, 3}'
    5json.loads(bad)
    6# json.decoder.JSONDecodeError: Expecting ',' delimiter

    対処法: 括弧の対応を確認してください。開き { と閉じ }、開き [ と閉じ ] の数が一致しているかチェックしましょう。

    ミス5:数値をクォートで囲んでしまう

    1import json
    2
    3# 数値がクォートで囲まれている(これ自体はエラーにならないが、意図と違う結果になる)
    4data = json.loads('{"age": "25"}')
    5print(data["age"] + 1)
    6# TypeError: can only concatenate str (not "int") to str

    対処法: 数値はクォートで囲まず、そのまま書きます。"25" は文字列、25 は数値です。

    デバッグのコツ

    JSONのエラーに遭遇したら、以下の手順で確認しましょう。

    1. エラーメッセージの行番号・位置を確認する --- JSONDecodeError にはエラーの位置が含まれています

    2. 括弧の対応を確認する --- {} と [] の数を数える

    3. カンマの位置を確認する --- 末尾カンマがないか、カンマの抜けがないか

    4. クォートを確認する --- シングルクォートになっていないか

    5. オンラインツールでバリデーションする --- 次のセクションで紹介するツールを使う


    便利なツール

    JSONを扱うときに役立つツールを紹介します。

    JSONフォーマッター / バリデーター

    ブラウザで使えるオンラインツールです。JSONを貼り付けると、自動で整形・検証してくれます。

  • JSONLint (https://jsonlint.com/) --- JSONの文法チェックができるバリデーター。エラー箇所を教えてくれる
  • JSON Formatter & Validator (https://jsonformatter.curiousconcept.com/) --- 整形とバリデーションが同時にできる
  • VS Codeの機能

    VS Codeを使っているなら、追加のツールなしでJSONの整形ができます。

    1. .json ファイルを開く

    2. Shift + Alt + F(Windows)/ Shift + Option + F(Mac)で自動整形

    Pythonでのワンライナー整形

    ターミナルからJSONを整形したいときは、Pythonのワンライナーが便利です。

    1echo '{"name":"田中","age":25}' | python -m json.tool

    出力:

    1{
    2    "name": "田中",
    3    "age": 25
    4}

    python -m json.tool は標準ライブラリの機能なので、追加インストールなしで使えます。

    jqコマンド

    コマンドラインでJSONを扱うなら、jq というツールが非常に強力です。

    1# インストール(Mac)
    2brew install jq
    3
    4# 整形して表示
    5echo '{"name":"田中","age":25}' | jq .
    6
    7# 特定の値を取り出す
    8echo '{"name":"田中","age":25}' | jq .name
    9# "田中"

    APIのレスポンスを確認するときなどに活躍します。


    まとめ

    JSONの基本をおさらい

    JSONはテキストでデータを表現するための世界標準のフォーマットです。API通信、設定ファイル、データ保存など、プログラミングのあらゆる場面で使われています。

    構文チートシート

    1{
    2  "文字列": "ダブルクォートで囲む",
    3  "数値": 42,
    4  "小数": 3.14,
    5  "真偽値_true": true,
    6  "真偽値_false": false,
    7  "空値": null,
    8  "配列": [1, "二", true, null],
    9  "オブジェクト": {
    10    "入れ子": "もできる"
    11  }
    12}

    6つのルール

    1. キーと文字列はダブルクォートで囲む

    2. キーと値はコロンで区切る

    3. 要素間はカンマで区切る(末尾カンマは禁止)

    4. 使えるデータ型は6種類(文字列・数値・真偽値・null・オブジェクト・配列)

    5. コメントは書けない

    6. 真偽値は小文字(true / false)、空値も小文字(null)

    Pythonでの操作早見表

    やりたいことコード
    JSON文字列 → 辞書json.loads(json_string)
    辞書 → JSON文字列json.dumps(data, ensure_ascii=False)
    辞書 → 整形JSON文字列json.dumps(data, ensure_ascii=False, indent=2)
    JSONファイル → 辞書json.load(open("file.json"))
    辞書 → JSONファイルjson.dump(data, open("file.json", "w"), ensure_ascii=False, indent=2)

    JavaScriptでの操作早見表

    やりたいことコード
    JSON文字列 → オブジェクトJSON.parse(jsonString)
    オブジェクト → JSON文字列JSON.stringify(data)
    オブジェクト → 整形JSON文字列JSON.stringify(data, null, 2)

    JSON vs Python 変換対応表

    JSONPython
    trueTrue
    falseFalse
    nullNone
    "string""string" または 'string'

    JSONは一度理解してしまえば、ずっと使い続ける基礎知識です。APIを叩くとき、設定ファイルを編集するとき、AIと連携するとき、必ず役に立ちます。

    この記事で学んだルールを頭に入れておけば、JSONに関するエラーの大半は自力で解決できるようになるはずです。ぜひ実際にPythonやJavaScriptでJSONを書いて、手を動かしながら身につけてみてください。

    次のステップ

    ロードマップのステップ 6/8 完了!次は「Claude Codeを導入する」です。

    次へ: Claude Codeってなに?導入から使い方まで完全ガイド

    おすすめのコース

    AIでWebアプリを開発して公開するまでの全体像

    AIでWebアプリを開発して公開するまでの全体像

    AIを使ってWebアプリを作り、実際にインターネットに公開するまでの全体像をわかりやすく解説します。企画→開発→デプロイの流れ、使うツールや技術の選び方、初心者が陥りやすい落とし穴まで、バイブコーディング時代の開発プロセスを俯瞰できるコラムです。

    無料
    Claude Codeってなに?導入から使い方まで完全ガイド

    Claude Codeってなに?導入から使い方まで完全ガイド

    AIがコードを書いてくれる「Claude Code」を徹底解説。Claude Codeとは何か、何ができるのか、インストール方法から基本的な使い方まで、初心者にもわかりやすくステップバイステップで紹介します。バイブコーディングを始めたい方の最初の一歩に最適な無料講座です。

    無料
    Claude Codeを使う前に!Node.js導入ガイド

    Claude Codeを使う前に!Node.js導入ガイド

    Claude CodeなどのAI開発ツールを使うにはNode.jsが必要です。この無料講座では、Node.jsとは何か、なぜ必要なのかをわかりやすく解説し、Windows・Macそれぞれのインストール手順をステップバイステップで紹介します。npmの基本的な使い方も学べます。

    無料
    もう怖くない!エラーメッセージの読み方入門

    もう怖くない!エラーメッセージの読み方入門

    プログラミング初心者が最もつまずく「エラーメッセージ」を徹底攻略します。赤い文字や英語の羅列に怯える必要はもうありません。この無料講座では、Pythonのエラーメッセージの読み方を「下から上へ」のシンプルなルールで解説し、よく出る10大エラーの原因と対処法を具体的なコード例とともに紹介します。エラーを「敵」から「味方」に変えて、バイブコーディングをもっとスムーズに進めましょう。

    無料
    ふわふわコード
    プライバシーポリシー免責事項特定商取引法に基づく表記FAQサポートチャットお問い合わせ運営会社
    © 2026 Shizukuya inc. All rights reserved.