
Pythonでデータを扱う場面では、構造化された情報をやり取りするためにJSON(JavaScript Object Notation)が最も多く利用されます。
特にWeb APIやログ設計、設定ファイルなど、現場での登場頻度は圧倒的です。
Pythonでは標準ライブラリの「json」モジュールを使うだけで、辞書型(dict)やリスト型をJSON形式に変換したり、その逆を行うことができます。
この記事では、実務で遭遇した「文字化け」や「型の不一致」といった落とし穴を交えながら、JSONの正しい扱い方と安全な入出力処理の基礎を理解していきます。
Pythonの基礎知識(基礎編)
🟣 Pythonの基礎知識(基礎編)
📌基本文法から実用テクニックまで、Pythonの土台を固めるステップアップ講座
└─ 【Pythonの基礎知識(基礎編)】仕組みから学ぶ思考と自動化のプログラミング講座
├─ STEP 0:Pythonを動かす“仕組み”を理解する
| ├─【Pythonの基礎知識】Pythonを動かす環境とは何か? “自分専用の環境”を作る
| ├─【Pythonの基礎知識】Hello Worldの裏側にある実行の仕組み
| └─【Pythonの基礎知識】Pythonのファイル構造と実行パスを理解する
|
├─STEP 1:Pythonで“考える仕組み”を作る(思考編)
| ├─【Pythonの基礎知識】データ型で世界を定義する|数・文字・真偽の正体
| ├─【Pythonの基礎知識】変数と値の動きを通して仕組みを理解しよう
| ├─【Pythonの基礎知識】条件分岐で“判断を任せる”仕組みを作る
| ├─【Pythonの基礎知識】for文で“人の手”を離す仕組みを作る
| └─【Pythonの基礎知識】while文で“継続する仕組み”を作る
|
├─STEP 2:Pythonで“情報を扱う仕組み”を作る(構造編)
| ├─【Pythonの基礎知識】コレクション型の正しい選び方(list, tuple, dict, set)
| ├─【Pythonの基礎知識】リストで情報を整理し、仕組みに流れを持たせる
| ├─【Pythonの基礎知識】辞書型でデータを“意味”で管理する
| └─【Pythonの基礎知識】集合型で重複を排除し、無駄をなくす仕組みを作る
|
├─STEP 3:Pythonで“動きを再利用する仕組み”を作る(関数・モジュール編)
| ├─【Pythonの基礎知識】関数で処理を再利用する|“人間の手順”を仕組みに変える
| ├─【Pythonの基礎知識】引数と戻り値で“情報のやりとり”を自動化する
| ├─【Pythonの基礎知識】モジュールとパッケージで“仕組みを部品化”する
| └─【Pythonの基礎知識】importの裏側を理解し、コードを分離する設計思考
|
├─STEP 4:Pythonで“データを扱う仕組み”を作る(入出力・永続化編)
| ├─【Pythonの基礎知識】ファイル操作でデータを読み書きする仕組みを作る
| ├─【Pythonの基礎知識】CSVを自在に扱う仕組みを作る
| ├─【Pythonの基礎知識】JSONで構造化データを操る
| └─【Pythonの基礎知識】例外処理で“壊れない仕組み”を設計する
|
└─STEP 5:Pythonで“自動化する仕組み”を作る(応用実践編)
├─【Pythonの基礎知識】スクリプトを自動実行させる仕組みを作る
├─【Pythonの基礎知識】日次タスクを自動化して人の時間を解放する
├─【Pythonの基礎知識】外部APIを活用して作業を外部化する
└─【Pythonの基礎知識】ログを記録して仕組みの信頼性を高める
JSONとは何か

Pythonでデータを扱うとき、最も登場するフォーマットの一つがJSONです。
JSONは「JavaScript Object Notation」の略で、データを「構造化」して表現するためのフォーマットです。
人間が読めて、機械も理解できるという特徴を持つため、Web APIやログ管理、設定ファイルなどで幅広く利用されています。
Pythonでは標準ライブラリ「json」モジュールを使うだけで、辞書やリストといったPythonの基本データ構造を簡単にJSON形式に変換できます。
CSVでもいいんじゃない?
JSONの仕様・特徴とPythonとの関係
JSONは、文字列・数値・真偽値・配列・オブジェクトなどの基本構成要素で成り立っています。
Pythonでいうと、それぞれが以下のように対応します。
| JSONの型 | Pythonの対応型 |
|---|---|
| object | dict |
| array | list |
| string | str |
| number | int / float |
| boolean | bool |
| null | None |
このように、PythonではJSONデータを直接辞書やリストとして扱えるため、変換が非常にスムーズです。
たとえば、辞書をJSON形式に変換するコードは以下の通りです。
import json
data = {"name": "BePro", "age": 38, "skills": ["Python", "Shell", "Java"]}
json_text = json.dumps(data, ensure_ascii=False, indent=2)
print(json_text)
【出力例:】
{
"name": "BePro",
"age": 38,
"skills": [
"Python",
"Shell",
"Java"
]
}
なくても動くけど?
実体験:構造化データ誤用で起きたトラブル
実務の現場では、JSONの扱いを誤るとデータ破損や通信エラーの原因になることがあります。
以前、API連携処理を自動化する際に、チームのメンバーが辞書をそのままprint出力して保存した結果、JSONとして不正な形式が混入するトラブルが発生しました。
# 誤った例
f = open("user_data.json", "w")
print(data, file=f) # Pythonの辞書をそのまま出力してしまう
この状態ではファイル内が「{'name': 'BePro'}」のようにPython独自の書式になり、他システムで読み込めません。
正しい方法はjson.dump()を使ってJSON形式に変換してから書き込むことです。
# 正しい例
with open("user_data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
【出力例:】
{
"name": "BePro"
}
こうした経験を通して、単に動くコードを書くのではなく、他のシステムや人が使うことを前提に「形式を守る意識」を持つことが大切だと学びました。
JSONは便利ですが、正確さを軽視するとすぐに問題が顕在化します。
PythonでJSONを扱う基本操作

PythonでJSONを扱うときに欠かせないのが標準ライブラリの「json」モジュールです。
外部ライブラリをインストールする必要はなく、インポートするだけで簡単に利用できます。
主な機能は2つあり、PythonのデータをJSONに変換する「シリアライズ」と、JSONをPythonオブジェクトに変換する「デシリアライズ」です。
この2つを正しく理解することで、API連携や設定ファイルの操作を安全に行えるようになります。
jsonモジュールによるシリアライズ/デシリアライズ
Pythonでは、jsonモジュールを使って次の関数でJSONを簡単に変換できます。
| 処理 | 関数名 | 説明 |
|---|---|---|
| シリアライズ | json.dumps() | PythonオブジェクトをJSON文字列に変換 |
| シリアライズ | json.dump() | PythonオブジェクトをファイルにJSON形式で出力 |
| デシリアライズ | json.loads() | JSON文字列をPythonオブジェクトに変換 |
| デシリアライズ | json.load() | JSONファイルを読み込みPythonオブジェクトに変換 |
import json
# Pythonの辞書をJSON文字列に変換
data = {"user": "BePro", "age": 38, "active": True}
json_text = json.dumps(data, ensure_ascii=False, indent=2)
print(json_text)
【出力例:】
{
"user": "BePro",
"age": 38,
"active": true
}
このように「dumps()」を使うと、辞書やリストをJSONとして出力できます。
ensure_ascii=Falseを指定することで、日本語などのマルチバイト文字も文字化けせずに扱えます。
また、indentを指定すると整形されて読みやすくなります。
# JSONをファイルに出力
with open("user.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
【出力例:】cat user.json
{
"user": "BePro",
"age": 38,
"active": true
}
次に、ファイルや文字列からJSONを読み込む例を見てみましょう。
# JSON文字列をPythonの辞書に変換
json_text = '{"user": "BePro", "age": 38, "active": true}'
data = json.loads(json_text)
print(data["user"])
【出力例:】
BePro
例示コードと変数説明
ここでは実際に使用したコードの変数を整理しておきます。理解しておくと、他のプロジェクトでもそのまま応用できます。
| 変数名 | 意味 | 例 |
|---|---|---|
| data | Pythonの辞書データ。JSON化したい情報を保持。 | {"user": "BePro", "age": 38} |
| json_text | JSON形式の文字列。API通信などで利用。 | '{"user": "BePro", "age": 38}' |
| f | ファイルオブジェクト。読み書きのために使用。 | open("user.json", "w") |
このように、Pythonのjsonモジュールは直感的でシンプルながら、データ交換の要となる強力な機能を持っています。
慣れるとAPI開発やログ出力の精度も大幅に向上します。
実践:ファイル/APIデータでJSONを活用

ここからは、実際にファイルや外部APIと連携してJSONデータを活用する方法を解説します。
ファイル操作を通して「保存と再利用」を、APIからの取得を通して「通信と解析」を学ぶことで、Pythonで扱うデータの幅が一気に広がります。
特に、Web開発や自動化スクリプトではJSONを扱えないと処理が途端に複雑になります。
実務で頻出するシーンを想定して理解を深めていきましょう。
JSONファイルの読み書き
まずはファイルとしてJSONデータを保存し、後からそれを読み込む基本的な流れを確認します。
Pythonでは json.dump() と json.load() を使えば、わずか数行で実現できます。
import json
data = {"user": "BePro", "role": "engineer", "active": True}
# JSONファイルに書き込み
with open("user.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# JSONファイルを読み込み
with open("user.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["user"])
【出力例:】
BePro
このコードでは、まずdata辞書をJSONファイルに保存し、その後同じファイルを開いて再度辞書型として読み込んでいます。
ファイルの内容を確認したい場合は、次のようにLinuxコマンドで表示できます。
cat user.json
【出力例:】
{
"user": "BePro",
"role": "engineer",
"active": true
}
また、json.dump()を使うことでエンコードエラーを防ぎながら日本語も安全に扱えます。
ensure_ascii=Falseを指定しておけば、マルチバイト文字も文字化けせずに保存されます。
外部APIから取得したJSONを処理した実体験
次に、実務でよくあるケースとして「APIから取得したJSONデータを処理する」例を見てみましょう。
最近、筆者が社内ツールの自動化を行った際、外部APIから社員情報を取得して整形するタスクをPythonで実装しました。
import requests
import json
response = requests.get("https://api.example.com/users/123")
data = response.json()
print(data["name"])
【サーバーから送られてきたJSONデータ】
{
"id": 123,
"name": "BePro",
"department": "system",
"active": true
}
このとき、response.json() によって上記の内容がPythonの辞書に変換され、data["name"] は "BePro" を取り出して表示します。
【出力例:】
BePro
このように requests モジュールを使えば、APIレスポンスを簡単にJSONとして受け取ることができます。
Pythonの辞書として扱えるため、ループで一覧を作ったり、条件に応じて抽出したりといった処理も簡単です。
それでも同じように扱えるの?
APIの結果をファイルに保存すれば、あとでオフライン解析にも利用できます。
たとえば次のように、取得したデータをローカルにキャッシュすることもできます。
with open("api_result.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
【出力例:】(= cat api_result.json)
{
"name": "BePro",
"department": "system",
"active": true
}
これは自動化や運用スクリプトでよく使うテクニックだね。
気をつけること/落とし穴と対策

JSONは便利で柔軟なデータ形式ですが、扱いを誤ると「文字化け」や「データ型の不一致」といった問題が発生します。
特にPythonと外部システムのやり取りでは、エンコード設定や型の違いによるトラブルが起こりやすく、原因が見えにくいため注意が必要です。
ここでは、筆者が実際に遭遇したミスや対策を交えながら、運用上で押さえておくべきポイントを解説します。
文字コード・データ型のズレ/互換性の課題
PythonでJSONを扱う際に最も多いトラブルは、「文字コードの違いによる文字化け」と「データ型の変換ミス」です。
JSONはUTF-8を前提としていますが、システムによってはShift_JISやEUC-JPで保存されていることもあります。
たとえば、次のようなケースです。
import json
with open("config.json", "r", encoding="utf-8") as f:
data = json.load(f)
ファイルをUTF-8以外の文字コードで保存していた場合、上記のようなコードでも読み込み時に「UnicodeDecodeError」が発生します。
この場合は、ファイルのエンコードを統一するか、読み込み時に正しい文字コードを指定することが重要です。
with open("config.json", "r", encoding="shift_jis") as f:
data = json.load(f)
もうひとつの落とし穴は、型の違いです。
たとえばJSONの数値はPythonで自動的にintやfloatに変換されますが、True/Falseが「true」「false」に置き換わるなど微妙な差異があります。
外部システムに送信する際は、この違いが原因で「型エラー」や「不正フォーマット」と判定されることがあります。
data = {"price": 100, "active": True}
print(json.dumps(data))
【出力例:】
{"price": 100, "active": true}
見た目ではほとんど同じですが、PythonではTrue、JSONではtrue(小文字)と表現される点が異なります。
このような違いを理解しておくと、他システムとの連携がスムーズになります。
実体験から学んだ運用上の注意点
筆者が実務でJSONを扱った際、最も苦労したのは「仕様変更への追随」と「ログ出力時の混乱」でした。
JSON形式の設定ファイルを運用していたところ、ある日突然APIのレスポンスに新しいキーが追加され、読み込みスクリプトがKeyErrorで停止しました。
try:
value = data["new_key"]
except KeyError:
value = None
このように例外処理を入れておくことで、予期せぬ変更にも柔軟に対応できます。
システムが「壊れにくい設計」になるというのが大きなメリットです。
じゃあログはどうしてる?
さらに、ファイルサイズが大きくなった場合は、圧縮や世代管理も検討すべきです。
不要なキーを削除したり、1ファイルごとに日付を付けて保存するなどの工夫をすれば、障害対応のときも素早く原因を特定できます。
mv user.json user_$(date +"%Y%m%d").json
【出力例:】
user_20251103.json
このような細やかな管理を続けることで、JSONデータの信頼性と保守性が格段に高まります。
便利な仕組みほど、扱い方次第で強力にも脆弱にもなる——そのことを意識して運用していくことが、エンジニアとしての確かな強みになります。
まとめ
JSONは、Pythonと外部システムをつなぐ“共通言語”のような存在です。
ファイルへの保存、APIとの通信、そして設定管理など、あらゆる場面で利用できます。
扱い方を理解しておくことで、データの流れを設計できるようになり、開発や運用の精度が大きく向上します。
す。JSONを自在に扱えるようになることは、Pythonエンジニアとしての確かな基礎を築く第一歩です。
次のおすすめ記事
👉 【Pythonの基礎知識】例外処理で“壊れない仕組み”を設計する
実践環境を整える
ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
→ VPS徹底比較!ConoHa・さくら・Xserverの選び方

