コース一覧
    Pythonエラー・データ形式
    JSONで保存

    Pythonエラー・データ形式

    例外処理とデータ形式を深め、異なる入力を検証し変換する処理を設計できるようにします。

    1
    エラー処理の設計
    01. 例外の階層15分
    02. raiseで例外を投げる15分
    03. カスタム例外15分
    04. finallyとelse15分
    05. assertで前提を守る15分
    06. つくる 入力検証の例外設計20分
    07. 第5章クイズ10分
    2
    ファイルとデータ形式
    01. csvモジュール15分
    02. JSONで保存15分
    03. JSONを読み込む15分
    04. pathlibでパス操作15分
    05. 文字コード15分
    06. つくる JSON保存へ移行20分
    07. 第6章クイズ10分

    JSONで保存

    このレッスンでできるようになること。json.dump を使って、入れ子になった家計簿の構造をそのままファイルに保存できるようになります。

    CSV は表の形をした平らなデータには向いていますが、家計簿を「月ごとに支出のリストを持つ辞書」として持ちたくなると途端に苦しくなります。表の1行に入れ子は書けないので、月を別の列に押し込んだり、ファイルを月ごとに分けたりという工夫が必要になるからです。

    JSON は、この入れ子をそのまま書ける形式です。Python の辞書とリストと数値と文字列が、ほぼ同じ形のまま文字列になります。標準ライブラリの json モジュールを使うと、変換は1行で終わります。

    Python

    import json
    
    kakeibo = {"2026-08": [{"品名": "ノート", "金額": 200}]}
    
    with open("kakeibo.json", "w", encoding="utf-8") as f:
        json.dump(kakeibo, f, ensure_ascii=False, indent=2)

    json.dump はデータとファイルオブジェクトの2つを受け取り、ファイルへ書き込みます。名前が似ている json.dumps は、末尾に s が付いているぶんだけ「文字列 (string) を返す」と覚えると混ざりません。ファイルに書くなら dump、変数に入れたいなら dumps です。

    付けておきたい引数が2つあります。ensure_ascii=False を付けないと、日本語が \u30ce のような形に置き換わって、ファイルを開いても人が読めなくなります。indent=2 を付けると改行と字下げが入り、差分を見たときにどこが変わったか分かるようになります。どちらも省略できますが、家計簿のように人が中身を確かめたいデータでは付けておくのが実用的です。

    1つだけ落とし穴があります。JSON に書けるのは辞書、リスト、文字列、数値、真偽値、null だけです。日付を date 型のまま dump しようとすると、変換できないというエラーになります。日付は "2026-08-03" のような文字列にしてから保存します。

    要件

    1. json.dump で kakeibo を kakeibo_json.json に書き出す
    2. ensure_ascii=False と indent=2 を付ける
    3. open には encoding="utf-8" を付ける
    4. 書いたファイルを read で読み直し、「21 行」の形で行数を表示する
    5. 続けて1行目、2行目 (前後の空白を除いたもの)、"コーヒー豆" が本文に含まれるかを表示する

    ヒント

    行に分けるには text.splitlines() が使えます

    2行目の字下げは lines[1].strip() で落とせます

    含まれるかどうかは "コーヒー豆" in text で真偽値になります

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • JSONを読み込む

      json.load で保存した構造を読み戻します。

    • pathlibでパス操作

      Path でパスを安全に組み立て、保存先を整理します。

    • 文字コード

      encoding を明示して、日本語のデータを安全に保存します。

    • つくる JSON保存へ移行

      CSV から JSON へデータを移す処理を書きます。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • applicationJSON 本文を送るときの Content-Type
    • リスト順序付きで複数の値を扱うデータ構造
    • 標準ライブラリPythonに同梱の公式モジュール群
    • モジュール他ファイルから import できるPythonファイル
    • オブジェクトキーと値のペアで構造を作るデータ
    • 変数データに名前をつけて参照する仕組み
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    JSONで保存

    ⌘S で保存