【2026年7月最新】Pythonのjson.loadsとjson.loadの違い!型変換の落とし穴と正しい使い方を完全解説

【2026年7月最新】Pythonのjson.loadsとjson.loadの違い!型変換の落とし穴と正しい使い方を完全解説

「json.loadsとjson.loadって何が違うの?」「文字列型と辞書型で操作が変わって混乱する」——Pythonの初心者がJSONを扱おうとするとき、必ずと言っていいほどつまずくポイントです。

この記事では、Pythonのjson.loads・json.load・json.dumps・json.dumpの違いを完全解説します。型変換の仕組み・よくあるエラーの解決策・実際の業務での活用例まで網羅します。後半ではClaude CodeでJSONデータ処理を自動化する方法も解説します。

AI鬼管理山崎 AI鬼管理山崎
json.loadsとjson.loadの違いは「末尾のsの有無だけ」と思いがちですが、実は「何を入力として受け取るか」という根本的な違いがあります。この区別を最初に正確に理解することが、Pythonでのデータ処理の基礎になります。
✔️json.loadsとjson.loadの入力の違いが明確にわかる
✔️json.dumps・json.dumpの出力の違いも整理できる
✔️JSONとPythonの型変換対応表を把握できる
✔️よくあるエラー3種類(TypeError・KeyError・JSONDecodeError)の解決策がわかる
✔️Claude CodeでJSON処理を自動化する具体的な方法がわかる
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】Pythonのjson.loadsとjson.loadの違い!型変換の落とし穴と正しい使い方を完全解説
Pythonのjson.loadsとjson.loadの違いを完全解説。文字列とファイルの違い、型変換の仕組み、json.dumps/json.dumpとの関係、よくあるエラーと対処法、Claude CodeでJSON処理を自動化する方法まで。

01 JSONとは——Pythonで扱う前に知るべき基礎 テキストベースのデータ交換フォーマット。APIレスポンスの標準

📚 用語解説

JSON(JavaScript Object Notation):テキストベースのデータ交換フォーマット。元々はJavaScriptのオブジェクト記法がベースだが、現在はほぼ全てのプログラミング言語で利用できる。中括弧{}でオブジェクト、角括弧[]で配列を表現する。WebのAPIレスポンスの事実上の標準形式。人間にも読みやすいテキスト形式でデータを表現できる。

JSONはWebアプリケーション開発・データ連携・APIとの通信で最も普及したデータフォーマットです。Pythonで外部APIを呼び出すと、レスポンスはほぼ確実にJSON形式で返ってきます。

{
  "name": "田中太郎",
  "age": 30,
  "email": "tanaka@example.com",
  "hobbies": ["読書", "プログラミング", "旅行"],
  "address": {
    "city": "東京",
    "zip": "100-0001"
  },
  "active": true
}

JSONの構造的な特徴:

✔️文字列(String):ダブルクォートで囲む(シングルクォートは不可)
✔️数値(Number):整数・小数をそのまま書く
✔️配列(Array):角括弧[]で要素を並べる
✔️オブジェクト(Object):中括弧{}でキーと値のペアを記述
✔️ブール値:true・false(小文字)
✔️null:JavaScriptのundefinedに相当(Pythonのnoneに対応)

02 json.loads vs json.load——最重要の使い分け sの有無が「文字列受取」か「ファイル受取」の違い

まず結論から:

関数入力用途
json.loads()文字列(str)APIレスポンス・変数として持っているJSONテキストを辞書に変換
json.load()ファイルオブジェクト(file)JSONファイルを開いてその内容を辞書に変換

📚 用語解説

json.loads(loads = load string):sはstringの略。json.loads()は文字列をPythonのデータ型(主に辞書または配列)に変換(デシリアライズ)する関数。APIからのレスポンスや、変数に格納されたJSON形式の文字列を扱うときに使う。

2-1. json.loadsの使い方

import json

# 文字列として持っているJSONデータ
json_string = '{"name": "田中太郎", "age": 30, "active": true}'

# json.loadsで辞書型に変換
data = json.loads(json_string)

print(type(json_string))  # <class 'str'>  ← 文字列型
print(type(data))         # <class 'dict'>  ← 辞書型に変換された!

print(data["name"])       # 田中太郎
print(data["age"])        # 30
print(data["active"])     # True(JSONのtrueはPythonのTrueになる)

最もよく使うシナリオはWebAPIのレスポンス処理です:

import json
import urllib.request

# Web APIを呼び出す
url = 'https://api.example.com/users/1'
with urllib.request.urlopen(url) as response:
    response_text = response.read().decode('utf-8')  # バイト→文字列
    user_data = json.loads(response_text)             # 文字列→辞書

print(user_data['name'])   # APIから取得したユーザー名

📚 用語解説

パース(Parse):テキストデータを解析してプログラムが扱えるデータ構造に変換する処理のこと。json.loadsでJSON文字列をPythonの辞書/リストに変換する操作は「JSONをパースする」と表現される。文字列を「意味のある構造」として読み取ることがパースの本質。JSONパース・XMLパース・HTMLパースなどがある。

json.loads()でAPIレスポンスをパースする際、受け取ったバイト列をまず文字列に変換(decode)してから渡す点に注意してください。urllib.request.urlopenは直接バイト列を返すため、response.read().decode('utf-8')→json.loads()の順番が必要です。

2-2. json.loadの使い方(ファイル読み込み)

📚 用語解説

json.load(ファイルオブジェクト受取):json.load()はファイルオブジェクトを直接受け取ってPythonのデータ型に変換する関数。open()で開いたファイルオブジェクトを渡す。json.loadsとの違いは「文字列ではなくファイルを受け取る」点のみ。内部では同じデシリアライズ処理が行われる。

import json

# JSONファイルを読み込む
with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)   # ファイルオブジェクトを直接渡す

print(type(data))         # <class 'dict'>  ← 辞書型
print(data['name'])       # ファイル内のJSONデータを直接操作できる

# ちなみに:json.loadsを使った同等の処理(非推奨)
with open('data.json', 'r', encoding='utf-8') as f:
    content = f.read()       # まずファイル全体を文字列として読む
    data = json.loads(content)  # 文字列を辞書に変換
💡 json.load vs json.loadsの選択基準

JSONデータがファイルにある→json.load()。JSONデータが文字列変数・APIレスポンス・DBから取得した値にある→json.loads()。この2択で迷うことはほぼなくなります。

03 json.dumps vs json.dump——出力方向の4関数を整理 loadとloadsの逆方向がdumpとdumps。4関数を一気に理解する

方向ファイル版文字列版
JSON→Python(読み込み・デシリアライズ)json.load(file)json.loads(string)
Python→JSON(書き込み・シリアライズ)json.dump(data, file)json.dumps(data)

3-1. json.dumpsの使い方

import json

data = {"name": "田中太郎", "age": 30, "hobbies": ["読書", "旅行"]}

# 辞書→JSON文字列
json_string = json.dumps(data)
print(json_string)
# {"name": "田中太郎", "age": 30, "hobbies": ["読書", "旅行"]}

# indent指定で見やすく整形
json_pretty = json.dumps(data, indent=2, ensure_ascii=False)
print(json_pretty)
# {
#   "name": "田中太郎",
#   "age": 30,
#   "hobbies": [
#     "読書",
#     "旅行"
#   ]
# }
⚠️ ensure_ascii=Falseを忘れずに

json.dumps()のデフォルトはensure_ascii=Trueで、日本語などの非ASCII文字が「\u5c71\u7530」のようにエスケープされます。日本語を読みやすい状態で出力したい場合は必ずensure_ascii=Falseを指定してください。

3-2. json.dumpの使い方

import json

data = {"name": "田中太郎", "age": 30, "updated": True}

# 辞書→JSONファイルに書き込み
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

# output.jsonの内容:
# {
#   "name": "田中太郎",
#   "age": 30,
#   "updated": true
# }
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 型変換の仕組み——JSONとPython型の対応表 「JSONのtrue」が「PythonのTrue」になる——型変換ルールを完全理解

📚 用語解説

シリアライズ・デシリアライズ:シリアライズ(Serialize):PythonのデータをJSON文字列に変換すること(json.dump/json.dumps)。デシリアライズ(Deserialize):JSON文字列をPythonのデータに変換すること(json.load/json.loads)。「直列化・逆直列化」とも呼ばれる。

JSON型Pythonの型
stringstrJSON: "hello" → Python: "hello"
number(整数)intJSON: 42 → Python: 42
number(小数)floatJSON: 3.14 → Python: 3.14
arraylistJSON: [1,2,3] → Python: [1, 2, 3]
objectdictJSON: {"key": "val"} → Python: {"key": "val"}
true/falseTrue/FalseJSON: true → Python: True(大文字T)
nullNoneJSON: null → Python: None

重要な点はJSONのブール値(true/false)がPythonでは大文字始まり(True/False)に変換されることです。またJSONのnullはPythonのNoneになります。

4-1. 逆方向(Python→JSON)の型対応

Pythonの型JSON型
strstring
int・floatnumber
list・tuplearray
dictobject
True・Falsetrue・false(小文字に変換)
Nonenull
⚠️ Pythonの特殊な型はJSONに変換できない

datetime・set・bytes・カスタムクラスなどはデフォルトではjson.dumps()でシリアライズできずTypeErrorが発生します。datetimeを変換したい場合はisoformat()で文字列に変換してから保存する方法が一般的です。

05 実践:JSONファイルの読み込み・加工・書き込みの完全フロー 読む→加工→書く——実際の業務で使うパターン

JSONファイルを
json.load()で読む
Pythonの辞書/リスト
として操作・加工
必要なデータを
取り出し・変換
json.dump()で
結果をファイルに保存
完了
import json
from datetime import datetime

# Step 1: JSONファイルを読み込む
with open('users.json', 'r', encoding='utf-8') as f:
    users = json.load(f)

# Step 2: データを加工する
# 全ユーザーにupdated_atフィールドを追加
for user in users:
    user['updated_at'] = datetime.now().isoformat()

# アクティブユーザーだけフィルタ
active_users = [u for u in users if u.get('active', False)]

# Step 3: 別のファイルに書き出す
with open('active_users.json', 'w', encoding='utf-8') as f:
    json.dump(active_users, f, indent=2, ensure_ascii=False)

print(f'{len(active_users)}件のアクティブユーザーを書き出しました')

5-1. APIレスポンスをJSONとして処理するパターン

import json
import urllib.request

def get_user_data(user_id):
    url = f'https://jsonplaceholder.typicode.com/users/{user_id}'

    with urllib.request.urlopen(url) as response:
        # APIレスポンス(バイト列)→文字列→辞書
        raw = response.read().decode('utf-8')
        user = json.loads(raw)

    # 必要なフィールドだけ抽出
    return {
        'id': user['id'],
        'name': user['name'],
        'email': user['email'],
        'city': user['address']['city'],  # ネストされた値にアクセス
    }

# 使い方
user = get_user_data(1)
print(f"名前: {user['name']}, 都市: {user['city']}")

06 よくあるエラーと解決策——TypeError・KeyError・JSONDecodeError JSON処理で頻出する3種類のエラーを網羅

6-1. TypeError: the JSON object must be str, not dict

json.loads()に辞書型(dict)を渡してしまったときに起きるエラーです。

import json

data = {"name": "田中"}

# NG: json.loadsに辞書を渡している
json.loads(data)  # ← TypeError!

# OK: json.loadsには文字列を渡す
json_string = json.dumps(data)   # まず辞書→文字列
result = json.loads(json_string) # 文字列→辞書(意味はないが型変換の例として)

# よくある実際のNG例:
# APIレスポンスがすでに辞書なのにjson.loadsを通そうとする
response = {"id": 1, "name": "test"}  # すでに辞書
json.loads(response)  # ← TypeError!
# 解決:すでに辞書なので変換不要。そのまま使う

6-2. KeyError: 'key_name'

辞書の中に指定したキーが存在しないときに起きます。JSONのフィールドが省略されている場合や、スペルミスのときに頻発します。

import json

data = json.loads('{"name": "田中", "age": 30}')

# NG: 存在しないキーにアクセス
print(data["email"])  # ← KeyError: 'email'

# OK1: .get()でデフォルト値を指定(KeyErrorが起きない)
print(data.get("email", "未設定"))  # 未設定

# OK2: inで存在確認
if "email" in data:
    print(data["email"])
else:
    print("emailフィールドなし")

6-3. json.JSONDecodeError: Expecting value

JSON形式が正しくない文字列をjson.loads()に渡したときに発生します。

import json

# NG: Pythonの書き方(シングルクォート)はJSONではエラー
json.loads("{'name': 'tanaka'}")  # ← JSONDecodeError(ダブルクォート必須)

# NG: 末尾のカンマ(Pythonは許容するがJSONはエラー)
json.loads('{"name": "tanaka",}')  # ← JSONDecodeError

# OK: 正しいJSON形式
json.loads('{"name": "tanaka"}')  # OK

# エラーを安全にハンドリングする方法
try:
    data = json.loads("invalid json text")
except json.JSONDecodeError as e:
    print(f"JSON形式エラー: {e}")
    data = None
💡 JSONの書式検証には online JSON validator を活用

APIから返ってきたJSONデータが正しい形式か確認したいときは、jsonlint.comなどのオンラインバリデーターにコピー&ペーストすると素早くエラー箇所を特定できます。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 【比較】Python手書き vs Claude Code——JSON処理の自動化 APIとDBをつなぐJSONパイプラインをClaude Codeで自動化する

ここまでPythonのjson処理を詳しく解説しました。後半では「このJSON処理をClaude Codeに書かせる・自動化する」という実践的なアプローチを解説します。

比較軸Python手書きClaude Codeで生成
コード作成時間遅い(文法・API仕様を調べながら書く)速い(「やりたいこと」を日本語で伝えるだけ)
エラーハンドリング自分で全パターンを考えるClaude Codeが典型的なエラーを自動で組み込む
コード品質経験・スキルに依存現代的なベストプラクティスを踏まえたコードが出る
日本語でのやり取り不可OK(「jsonファイルを読んでメール一覧だけ取り出して」が通じる)

7-1. Claude CodeへのJSON処理依頼の実践例

✔️「APIから取得したJSONレスポンスから、nameとemailだけ抽出してCSVファイルに保存するPythonを書いて」
✔️「このJSONファイルを読んで、ageが30以上のユーザーだけを別のJSONファイルに書き出すコードを書いて」
✔️「json.JSONDecodeErrorが起きているコードを渡すので、エラーの原因と修正コードを教えて」
✔️「Pythonの辞書型をJSONファイルに書き込む際に、日本語が文字化けしないようにするコードを書いて」
JSON処理の要件を
日本語で説明
Claude Codeが
Pythonコードを生成
コードをコピーして
実行・確認
エラーが出たら
Claude Codeに相談
期待通りの
処理が完成

弊社GENAIでは、外部APIからJSONでデータを受け取り→加工→社内データベースに書き込むという処理を、Claude Codeで実装しています。「月次のAPIデータ取得→整形→レポート出力」というパイプラインをClaude Codeで自動化することで、以前は半日かかっていた作業が5分で完了するようになりました。

🏆
VERDICT
Claude Code に軍配
JSON処理のPythonコードはClaude Codeが最も得意とする分野。「手書きで全て覚える」より「Claude Codeに任せて確認する」方が速く・正確に実装できる。
代表菅澤 代表菅澤
Python×JSONの知識が必要なのは「Claude Codeが出したコードを読める」レベルで十分です。全て暗記する必要はありません。json.loadsとjson.loadの違い・型変換の基本を知っておけば、Claude Codeのコードを読んで判断できます。
cc-python-json-loads

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. json.loadsとjson.loadの違いは何ですか?

A. json.loadsは「文字列(str)」を受け取ってPythonの辞書等に変換します。sはstringの略です。json.loadは「ファイルオブジェクト」を受け取って変換します。APIレスポンスや変数のJSONテキストを扱うときはjson.loads、JSONファイルを読むときはjson.loadを使います。入力形式が違うだけで、内部でやっている処理(JSON→Python型変換)は同じです。

Q. Pythonでjsonを使うとき、importは必要ですか?

A. はい、ファイルの先頭に「import json」が必要です。jsonはPython標準ライブラリなので、pip installは不要です。「import json」一行でjson.load・json.loads・json.dump・json.dumpsが全て使えます。

Q. json.loadsで日本語が文字化けしてしまいます

A. 文字化けが起きる場合、まずファイルの読み込み時のエンコーディングを確認してください。open()では「encoding="utf-8"」を指定します。json.loads自体は文字列を受け取るため文字化けは起きませんが、ファイルを読む前のopen()かバイト列のdecode()でエンコーディング指定を間違えると文字化けします。json.dumps出力時の文字化けはensure_ascii=Falseで解決します。

Q. JSONDecodeErrorが起きます。原因と解決策は?

A. JSONDecodeErrorは「JSON形式として正しくない文字列を渡したとき」に発生します。よくある原因は:(1)シングルクォートを使っている(JSONはダブルクォートのみ)、(2)末尾のカンマ(Pythonは許容するがJSONは不可)、(3)空文字列を渡している、(4)APIがエラーレスポンスとして非JSON形式のテキストを返している。try-except json.JSONDecodeErrorでエラーを補足して原因を特定してください。

Q. Pythonの辞書とJSONの違いは何ですか?

A. 辞書はPythonのメモリ内のデータ構造、JSONはテキスト形式のデータ表現です。主な違いは:(1)辞書のキーはどんな型でも可、JSONのキーは文字列のみ、(2)辞書ではTrueとTrue(Pythonの大文字)、JSONではtrueとfalse(小文字)、(3)辞書のNoneはJSONではnull、(4)辞書はバイト・datetimeなどJSON非対応型を含める。辞書←→JSON変換には必ずjson.dumps(辞書→JSON)とjson.loads(JSON→辞書)を使います。

Q. Claude CodeでPythonのJSON処理コードを書いてもらえますか?

A. はい、Claude CodeはPythonのjson処理が非常に得意です。「APIからJSONを取得して整形してCSVに保存したい」「JSONファイルを読んで特定の条件でフィルタしたい」など、やりたいことを日本語で伝えるだけでコードを生成してくれます。エラーが出た場合もエラーメッセージをそのまま貼り付けると修正コードを出してくれます。json.loadsとjson.loadの使い分けも自動的に正しく判断します。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月14日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。