APIからデータを取得したり、設定ファイルを保存したりするとき、必ずと言っていいほど登場するのが「JSON(ジェイソン)」というデータ形式です。「なんとなく見たことはあるけれど、Pythonでどう読み書きすればいいのか分からない」という方も多いのではないでしょうか。
この記事では、Python標準のjsonモジュールを使って、辞書とJSONを相互に変換する方法や、JSONファイルの読み書き、日本語が文字化けしないための設定まで、初心者の方にも分かりやすく徹底解説します。コードはすべて実際に動く内容なので、手を動かしながら読み進めてみてください。
コンテンツ
JSONとは?Pythonでよく使われる理由
JSON(JavaScript Object Notation)は、データを「キーと値」のペアで表現する軽量なデータ形式です。もともとはJavaScript由来ですが、今では言語を問わずデータのやり取りに使われる共通フォーマットになっています。
たとえば、次のような文字列がJSONです。Pythonの辞書(dict)にそっくりな見た目をしていることに気づくと思います。
{
"name": "田中",
"age": 28,
"skills": ["Python", "SQL"]
}PythonでJSONがよく使われるのは、Webアプリのデータ通信(REST API)、設定ファイル、ログの保存など、実務のあらゆる場面で登場するからです。JSONを扱えるようになると、外部サービスとのデータ連携が一気に身近になります。
jsonモジュールの基本(4つの関数を覚えよう)
Pythonでは標準ライブラリのjsonモジュールをimportするだけでJSONを扱えます。追加インストールは不要です。まずは覚えるべき4つの関数を整理しましょう。
json.dumps():Pythonのオブジェクト → JSON文字列に変換json.loads():JSON文字列 → Pythonのオブジェクトに変換json.dump():Pythonのオブジェクト → JSONファイルに書き込みjson.load():JSONファイル → Pythonのオブジェクトに読み込み
末尾にsが付く(dumps / loads)と「文字列(string)」を相手にする、付かない(dump / load)と「ファイル」を相手にする、と覚えると混乱しません。
辞書 → JSON文字列(json.dumps)
Pythonの辞書をJSON形式の文字列に変換するにはjson.dumps()を使います。
import json
# Pythonの辞書
user = {"name": "田中", "age": 28, "skills": ["Python", "SQL"]}
# 辞書 → JSON文字列
json_str = json.dumps(user)
print(json_str)
# {"name": "\u7530\u4e2d", "age": 28, "skills": ["Python", "SQL"]}
print(type(json_str))
# <class 'str'>変換結果はstr型(文字列)になります。日本語が\u7530\u4e2dのように表示されていますが、これは後ほど解説する設定で読みやすくできるので安心してください。
JSON文字列 → 辞書(json.loads)
逆に、JSON形式の文字列をPythonの辞書に戻すにはjson.loads()を使います。APIから返ってきた文字列を扱うときの定番です。
import json
json_str = '{"name": "田中", "age": 28, "skills": ["Python", "SQL"]}'
# JSON文字列 → 辞書
data = json.loads(json_str)
print(data["name"]) # 田中
print(data["age"]) # 28
print(type(data)) # <class 'dict'>json.loads()で辞書に戻せば、あとは辞書の基本操作と同じようにキーを指定して値を取り出せます。数値は数値、リストはリストとして正しく復元される点もポイントです。
ここまでで「PythonでJSONを読み書きする感覚」がつかめてきたのではないでしょうか。こうした基礎が身についてくると、次は「APIを叩いて実際のWebサービスとデータをやりとりするアプリをPythonで作りたい」という気持ちが湧いてくるはずです。独学でそこから先に伸び悩んだときは、Pythonを実践的に学べるテックジムのようなプログラミングスクールの評判・料金をまとめた記事も参考にしてみてください。学習の進め方の選択肢が広がります。
JSONファイルの読み書き(dump / load)
実務では、JSONを文字列としてではなく「ファイル」として保存・読み込みする場面が多くあります。ここではwith構文と組み合わせて、ファイルを安全に扱う方法を見ていきましょう。
ファイルへ書き込む(json.dump)
import json
data = {"title": "ナノトイラボ", "tags": ["Python", "初心者"]}
# data.json というファイルに書き込む
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# data.json が作成され、整形された状態で保存されるwith open(...)を使うと、処理が終わったあとファイルを自動で閉じてくれます。ファイル操作の基本なので、まだ不安な方はwith構文の解説記事もあわせて確認しておくと安心です。
ファイルから読み込む(json.load)
import json
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["title"]) # ナノトイラボ
print(data["tags"][0]) # Pythonjson.load()で読み込むと、ファイルの中身がそのままPythonの辞書として手に入ります。あとは通常の辞書と同じように扱えます。
日本語の文字化けを防ぐ(ensure_ascii=False)
先ほどjson.dumps()で日本語が\u7530\u4e2dのように表示されたのを覚えているでしょうか。これは初期設定で日本語がエスケープされるためです。ensure_ascii=Falseを指定すると、日本語をそのまま出力できます。
import json
user = {"name": "田中", "age": 28}
# そのまま(日本語がエスケープされる)
print(json.dumps(user))
# {"name": "\u7530\u4e2d", "age": 28}
# ensure_ascii=False で日本語をそのまま表示
print(json.dumps(user, ensure_ascii=False))
# {"name": "田中", "age": 28}見やすく整形する(indent)
indentに数値を指定すると、その分だけインデント(字下げ)して見やすく整形できます。設定ファイルなど、人間が読むJSONを出力するときに便利です。
import json
user = {"name": "田中", "age": 28, "skills": ["Python", "SQL"]}
print(json.dumps(user, ensure_ascii=False, indent=2))
# {
# "name": "田中",
# "age": 28,
# "skills": [
# "Python",
# "SQL"
# ]
# }よくあるエラーと対処法
JSONを扱うときによく遭遇するのがJSONDecodeErrorです。これはJSONの書式が正しくないときに発生します。
import json
# 末尾に余分なカンマがある不正なJSON
broken = '{"name": "田中",}'
data = json.loads(broken)
# json.decoder.JSONDecodeError: Expecting property name
# enclosed in double quotes ...JSONでは、末尾の余分なカンマや、シングルクォートでの囲みは認められていません。文字列は必ずダブルクォートで囲む必要があります。また、数値が文字列になっているといった型の食い違いにも注意しましょう。型の扱いに不安がある方は型変換(キャスト)の解説記事も参考になります。
もっと効率的にPythonを学びたい人へ
JSONの読み書きができるようになると、API連携やデータ処理など「実際に動くもの」を作れる範囲がぐっと広がります。一方で、独学だとエラーの原因が分からず何時間も止まってしまう、体系的な学習の順番が分からない、といった壁にぶつかりがちです。
「未経験からPythonを本気で習得したい」「できれば転職やキャリアにつなげたい」という方は、マンツーマン指導で学べるスクールを検討するのも一つの手です。プロ講師に直接質問できる環境は、独学でのつまずきを一気に解消してくれます。まずは無料カウンセリングで、自分に合った学習プランを相談してみてはいかがでしょうか。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonのjsonモジュールを使ったJSONの扱い方を解説しました。最後に要点を振り返っておきましょう。
- JSONは「キーと値」でデータを表す共通フォーマットで、Pythonの辞書とよく似ている
json.dumps()で辞書→JSON文字列、json.loads()でJSON文字列→辞書に変換できる- ファイルは
json.dump()で書き込み、json.load()で読み込む(with構文と併用が基本) - 日本語の文字化けは
ensure_ascii=False、整形はindentで解決できる - 書式ミスがあると
JSONDecodeErrorが出るので、カンマやクォートに注意する
JSONはWeb開発やデータ処理の基礎となる大切なスキルです。ぜひ手を動かして、自分のコードに取り入れてみてください。
ナノトイラボ 