はじめに|JSONってなに?なんでPythonで使うの?
「JSON(ジェイソン)」って聞いたことありますか?プログラミングの世界ではよく出てくる言葉なんですが、初心者の方にとっては「なんのこっちゃ?」って感じかもしれませんね。
でも安心してください!この記事では、JSONとは何か、そしてなぜPythonで使うことが多いのかを、やさしく、丁寧に解説していきます。
JSONとは「データの言語」みたいなもの
まず、JSONは「JavaScript Object Notation(ジャバスクリプト・オブジェクト・ノーテーション)」の略です。これは、**データの形をルールにそって表した“書き方”**のことです。
たとえば、人の情報を「名前」「年齢」「住所」みたいに表したいとき、こういうふうに書けます:
{
"name": "たろう",
"age": 20,
"address": "東京都"
}
このように、JSONは**データをわかりやすく整理して書くためのフォーマット(形式)**なんです。
なんでPythonでもJSONを使うの?
実はこのJSON、もともとはJavaScriptという言語から生まれた書き方なんですが、いまではほとんどのプログラミング言語がこの形式を理解できます。
Pythonでも、Webアプリを作ったり、APIと呼ばれる外部サービスとやりとりをしたり、設定ファイルを読み書きしたりするときに、JSONがよく使われます。
たとえば、Pythonで「天気予報を調べるアプリ」を作るとき、インターネット上の天気情報APIからデータをもらう必要があります。そのとき、送られてくる情報はたいていJSON形式なんです。
だから、Pythonでアプリやツールを作るときには、このJSONの読み書きができるようになっておくととても便利なんですね。
2. JSONとPythonのデータ型の違い
JSONとPython、どちらも似たような見た目でデータを書けるんですが、実はちょっとしたルールの違いがあります。ここでは、その違いをやさしく紹介します。
✅ 文字列(String)
Pythonでは、文字列をシングルクォート(')でもダブルクォート(")でも書けますよね。
name = "たろう"
name = 'たろう'
どちらでもOKです。
でも、JSONではダブルクォート " " しか使えません。
{ "name": "たろう" } ← OK!
{ 'name': 'たろう' } ← NG!(これはエラーになります)
JSONでは必ずダブルクォートを使うようにしましょう。
✅ 真偽値(Boolean)
Pythonでは「True / False」と大文字で書きます。
is_hungry = True
でもJSONでは、小文字で「true / false」と書くのが正解です。
{ "is_hungry": true }
この違い、見た目はそっくりなのでうっかりミスしやすいポイントです!
✅ None と null
Pythonで「何もないよー」という状態を表すのは None ですよね。でも、JSONではこれを null と書きます。
status = None # Python
{ "status": null } # JSON
JSONでは null = None と覚えておけばOKです。
✅ 数値(Number)
数値に関しては、PythonもJSONも基本的にそのまま書けばOKです。
age = 25
height = 1.75
{ "age": 25, "height": 1.75 }
ただし、文字列と間違えないように、数値にはクォート("や')をつけないように注意しましょう!
✅ エスケープ文字の扱い
JSONでは、特殊な記号を文字列の中に含めたいときには「バックスラッシュ(\)」を使ってエスケープします。
たとえば、こんなふうに書きます:
{ "message": "彼は\"Python\"が好きです" }
これはこう見えます:
彼は"Python"が好きです
Pythonでも同じようなエスケープ処理がありますが、JSONを扱うときにも**「バックスラッシュの役割」**を理解しておくと安心です。
まとめ
| データの種類 | Python | JSON |
|---|---|---|
| 文字列 | 'abc' or "abc" | "abc"のみ |
| 真偽値 | True, False | true, false |
| 無(空) | None | null |
| 数値 | 123, 3.14 | 123, 3.14 |
| エスケープ | \", \\ | \", \\ |

この違いをしっかり覚えておけば、PythonでJSONを扱うときにエラーが起きにくくなりますよ!
3. PythonでJSONを扱う基本(jsonモジュール)
Pythonでは、jsonという標準モジュールを使えば、JSONの読み書きがとっても簡単にできます。特別なライブラリをインストールしなくても、最初から使えるのが嬉しいポイントです!
ここでは、PythonでJSONを扱うための基本的な使い方を、例といっしょにわかりやすく紹介していきますね。
3-1. Pythonのデータ → JSON文字列に変換する(json.dumps())
たとえば、Pythonで辞書データを作ったとします。
data = {
"name": "たろう",
"age": 18,
"is_student": True
}
このデータをJSON形式の「文字列」に変えたいときは、json.dumps() を使います。
import json
json_text = json.dumps(data)
print(json_text)
出力結果:
{"name": "たろう", "age": 18, "is_student": true}
ちゃんとPythonの True が JSONの true に変わってるのがわかりますね!
✅ 日本語が「文字化け」しちゃう?
実は、json.dumps() はデフォルトで日本語をUnicodeという文字コードに変換しちゃいます。たとえば:
json.dumps({"item": "りんご"})
結果:
{"item": "\u308a\u3093\u3054"}
「えっ、これなに!?」って思いますよね。
そんなときは、ensure_ascii=False をつければOK!
json.dumps({"item": "りんご"}, ensure_ascii=False)
結果:
{"item": "りんご"}
これで日本語もきれいに表示されますよ!
✅ ダブルクォートやバックスラッシュの自動処理
もし文字列の中に " や \ を含んでいたら、json.dumps() が自動でエスケープしてくれます。
json.dumps({"text": '彼は"Python"が好きです'})
結果:
{"text": "彼は\"Python\"が好きです"}
3-2. JSON文字列 → Pythonのデータに変換する(json.loads())
逆に、JSON形式の「文字列」をPythonの辞書などに戻したいときは、json.loads() を使います。
json_text = '{"name": "はなこ", "age": 22, "is_student": false}'
python_obj = json.loads(json_text)
print(python_obj)
結果:
{'name': 'はなこ', 'age': 22, 'is_student': False}
false がちゃんと False に変わってますね!
✅ ネストされたデータ(階層構造)もOK!
JSONでは、こんなふうに中に辞書やリストを入れることもあります:
{
"user": {
"name": "たろう",
"scores": [80, 90, 100]
}
}
これを Python に変換しても、ちゃんとネスト(入れ子)構造が保たれます。
text = '{"user": {"name": "たろう", "scores": [80, 90, 100]}}'
data = json.loads(text)
print(data["user"]["scores"][1]) # → 90
まとめ
| 処理の目的 | 関数名 | よく使う引数 |
|---|---|---|
| Python → JSON文字列 | json.dumps() | ensure_ascii=Falseなど |
| JSON文字列 → Python | json.loads() | 特になし |

この2つの関数を覚えておくだけで、JSONとのやりとりがぐんと楽になります!
4. JSONファイルの読み書き
これまでは「文字列」としてJSONを扱ってきましたが、実際の開発では**JSON形式のファイル(.json)**を読み込んだり、書き込んだりする場面がとても多いです。
たとえば、アプリの設定ファイルや、保存したデータを次回読み込むために使われたりします。
Pythonでは、ふつうのファイルの読み書き+jsonモジュールを組み合わせることで簡単に扱えますよ!
✅ JSONファイルを作って保存する(書き込み)
まずは、Pythonの辞書データを .json ファイルに保存してみましょう。
import json
data = {
"title": "Python入門",
"price": 0,
"tags": ["プログラミング", "初心者", "Python"]
}
# ファイルに書き込む
with open("book.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
ポイント解説:
open("book.json", "w", encoding="utf-8")
→ 書き込みモード("w")でファイルを開きます。日本語を扱うのでエンコーディングは"utf-8"に!json.dump()
→ データをファイルに直接書き込む関数です。ensure_ascii=False
→ 日本語をそのまま出力したいときの必須オプション!indent=2
→ JSONファイルをきれいに整形して保存するオプション。人間にも見やすくなります♪
✅ JSONファイルを読み込む
今度は、保存された .json ファイルを読み込んで、Pythonの辞書データとして使ってみましょう。
import json
# ファイルから読み込む
with open("book.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["title"]) # → Python入門
ポイント:
open(..., "r", encoding="utf-8")
→ 読み込みモード("r")で開きます。json.load()
→ JSONファイルの内容をPythonの辞書などのオブジェクトに変換してくれます。
✅ エラー対策のヒント
ファイルを読み込むときは、次のようなエラーが出ることもあります。
- ファイルが存在しない →
FileNotFoundError - JSONの書式が間違っている →
json.JSONDecodeError
このようなときは、ファイル名や拡張子、JSONの中身が正しいかをチェックしてみてくださいね!
おまけ:ファイルを読み込んで文字列として処理する場合
もしファイルの中身を「一度文字列として読み込んでから」処理したいなら、こう書けます:
with open("book.json", "r", encoding="utf-8") as f:
json_text = f.read()
data = json.loads(json_text)
ead()で文字列にして、それから json.loads() で辞書に変換するパターンですね!

これで、JSONファイルの読み書きもバッチリです!
5. よくあるエラーと対処法
PythonでJSONを扱っていると、ちょっとしたミスでエラーが出ることがあります。ここでは、よくあるエラーとその「原因」や「直し方」をわかりやすく紹介します!
🔴 ① json.decoder.JSONDecodeError
エラー例:
import json
text = '{name: "たろう"}' # ← カギかっこのミス!
data = json.loads(text)
出力されるエラー:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
原因と対処法:
このエラーは、JSON文字列の書き方が正しくないときに出ます。
JSONでは、キーや文字列にダブルクォート(”)が必須です。
✅ 修正例:
text = '{"name": "たろう"}' # ダブルクォートで囲む!
data = json.loads(text)
🔴 ② TypeError: Object of type ~ is not JSON serializable
エラー例:
import json
def greet():
return "こんにちは"
data = {"greeting": greet}
json.dumps(data)
原因と対処法:
このエラーは、「JSONに変換できないデータ」が含まれているときに出ます。
上の例では、関数 greet をJSONに変換しようとしたためにエラーになっています。
✅ 修正例:
data = {"greeting": greet()} # 関数を実行してから渡す
json.dumps(data)
✅ 変換できない主なデータ:
- 関数
- クラスのインスタンス(未対応のもの)
- datetimeオブジェクト(→文字列に変換すればOK)
🔴 ③ FileNotFoundError
エラー例:
with open("setting.json", "r", encoding="utf-8") as f:
data = json.load(f)
原因と対処法:
指定したファイルが存在しないときに出るエラーです。
✅ 修正チェックポイント:
- ファイル名にまちがいがないか?
- 拡張子
.jsonを忘れていないか? - ファイルが本当に同じフォルダにあるか?
🔴 ④ 文字化け(\uXXXXが出る)
例:
json.dumps({"メッセージ": "こんにちは"})
出力:
{"メッセージ": "\u3053\u3093\u306b\u3061\u306f"}
対処法:
→ ensure_ascii=False をつけましょう!
json.dumps({"メッセージ": "こんにちは"}, ensure_ascii=False)
まとめ:エラーの早見表
| エラー名 | 主な原因 | 対処法 |
|---|---|---|
JSONDecodeError | 書式ミス(クォート忘れなど) | 正しいJSON文字列か確認 |
TypeError | 変換できない型(関数・日付など) | str() や .isoformat()で変換 |
FileNotFoundError | ファイルが存在しない | ファイル名やパスを確認 |
| 日本語が文字化け | \uXXXXが出る | ensure_ascii=False を使う |

「なんでエラーが出るんだろう?」と困ったときは、まずはエラーメッセージをよく読んで、ここにあるパターンに当てはまるか見てみてくださいね。
まとめ|JSONを扱えるとPythonがもっと便利に!
この記事では、PythonでJSONを使うための基本をじっくり解説してきました。
もう一度、ポイントをおさらいしておきましょう!
- **JSONは「データの共通言語」**のようなもの。特にWeb APIや設定ファイルでよく使われます。
- Pythonでは
jsonモジュールを使って、文字列やファイルとしての読み書きが超カンタンにできます。 json.dumps()とjson.loads()を使えば、PythonとJSONの相互変換も自由自在!- ファイルで扱うときは
json.dump()/json.load()を使って、きれいに保存したり読み込んだりできます。 - エラーが出たときは、文字列のクォート・日本語文字化け・型エラーなど、よくあるパターンをチェック!
JSONの読み書きができると、データの保存・通信・設定管理など、いろんな場面でPythonがもっとパワフルに使えるようになります。ぜひ覚えておきましょう!
あわせて読みたい|関連するおすすめ記事
PythonでJSONを使いこなすなら、こちらの記事も役立ちます👇
- 🔗 【Python入門】自作モジュールの作り方と使い方を初心者向けにやさしく解説!
→ プログラムを整理して再利用したいときに便利! - 🔗 【初心者向け】FastAPIの基本の使い方をやさしく解説
→ JSONを使ったAPIアプリ開発の第一歩! - 🔗 【Python入門】コマンドライン引数をやさしく解説|argparseモジュール
→ コマンドラインでJSONファイルを指定したりするときに便利!
よくある質問(Q&A)
- QJSONと辞書(dict)は同じものですか?
- A
似ていますが、JSONは「文字列として保存・通信できる形式」、辞書は「Python内で使うデータ構造」です。相互に変換できます。
- QJSONファイルが読み込めないときは?
- A
拡張子
.jsonを忘れていたり、文字コードや書き方にミスがある場合があります。エラー文をよく見て対処しましょう!
- QJSONに日本語を書きたいけど文字化けします。
- A
json.dumps()やjson.dump()を使うときに、ensure_ascii=Falseを忘れずに書きましょう!







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。