JSONを読み込む
このレッスンでできるようになること。json.load で、保存しておいた家計簿の構造を Python のデータとして読み戻せるようになります。
前回は json.dump で辞書をファイルに書きました。今回はその逆で、プログラムを起動したときにファイルから前回までの家計簿を復元します。ここまで来ると、実行するたびにデータが消えるプログラムから卒業できます。
読み込みは json.load(f) の1行です。ファイルオブジェクトを渡すと、中身を読んで Python のデータに直して返します。書くときの dump と dumps と同じで、文字列から直したいときは json.loads を使います。
import json
with open("kakeibo.json", encoding="utf-8") as f:
kakeibo = json.load(f)
print(kakeibo["2026-08"][0]["品名"])読み戻したデータは、書いたときと同じ形の辞書やリストになっています。ただし完全に同じではない点が2つあります。1つ目は、タプルで書いたものがリストになって返ってくることです。JSON にタプルという型が無いためです。2つ目は、辞書のキーがすべて文字列になることです。{1: "ノート"} を保存すると、読み戻したときは {"1": "ノート"} になります。月を "2026-08" のような文字列で持っておけば、この違いに悩まされません。
もう1つ、実務でよくある落とし穴があります。ファイルの中身が壊れていたり空だったりすると、json.load は json.JSONDecodeError を投げます。第5章で学んだ try と except でこれを捕まえて、空の家計簿から始め直すという書き方が定番です。
月ごとの集計をするときは、sorted(kakeibo) のようにキーを並べ替えてから回します。辞書の順序に頼って出力すると、保存の仕方が変わったときに結果の順番が変わってしまうためです。
要件
- json.dump で kakeibo を kakeibo_load.json に保存する (ensure_ascii=False を付ける)
- 同じファイルを json.load で読み戻して restored に入れる
- type(restored).name を表示する
- sorted で月を昇順にしてから1行ずつ表示する
- 各行は 月、件数、"件"、合計金額、"円" を空白区切りで並べる
入出力例
出力: "dict
2026-08 2 件 1180 円
2026-09 2 件 12250 円
"