Python | 1 日 120 分 × 7 日アプリ学習:JSON保存アプリ(中級編)

Web APP Python
スポンサーリンク

2日目のゴール

2日目のテーマは
「JSON を“アプリのデータ保存”として使うための基礎を固める」
これです。

1日目では
「JSONとは何か」「Pythonで読み書きできる」
という“道具の理解”が中心でした。

2日目は一歩進んで、

  • JSON に 複数データを保存する
  • アプリ起動時に JSON を読み込んで前回の状態を復元する
  • データを更新して 再度 JSON に書き戻す

という「アプリとしてのデータ保存」の基本パターンを学びます。

ここを理解すると、
“設定ファイル”“ユーザー情報”“メモアプリ”“Todoアプリ”など
あらゆるアプリの「保存機能」が作れるようになります。


JSON保存アプリの基本構造を理解する

JSONは「アプリの外に置くデータベース」

アプリを閉じてもデータが残っていて、
次に起動したときに前回の状態が復元される。

これを実現するのが JSON ファイルです。

アプリの流れはこうなります。

  1. 起動時に JSON ファイルを読み込む
  2. Python のデータ(list/dict)として扱う
  3. データを追加・更新する
  4. 終了時(または更新時)に JSON に書き戻す

この「読み込む → 使う → 保存する」の流れは
どんなアプリでも共通です。


JSONに「複数データ」を保存する

1日目のデータは「1件」だった

今日は「複数件」を扱う

1日目では、こんな1件のデータを保存しました。

{
    "name": "Taro",
    "age": 25
}

2日目では、複数のユーザーを保存します。

[
  {
    "name": "Taro",
    "age": 25
  },
  {
    "name": "Hanako",
    "age": 30
  }
]

JSON では、
複数データは「リスト(配列)」で持つ
これが鉄則です。

Python ではこうなります。

users = [
    {"name": "Taro", "age": 25},
    {"name": "Hanako", "age": 30}
]
Python

この構造を JSON に保存し、
読み込んだら同じ構造で戻ってきます。


JSONファイルを読み込む関数を作る

「ファイルがないときは空のリストを返す」が重要

アプリを作るとき、
最初の起動では JSON ファイルが存在しない
という状況が必ず起きます。

そのため、読み込み関数はこう書くのが定番です。

import json
import os

def load_users(filename):
    if not os.path.exists(filename):
        return []  # ファイルがなければ空リスト

    with open(filename, "r", encoding="utf-8") as f:
        return json.load(f)
Python

ここでの重要ポイントは、

  • ファイルがないときにエラーにしない
  • 空のリストを返してアプリを動かせるようにする

という「アプリとしての優しさ」です。


JSONファイルに保存する関数を作る

「Pythonのデータ → JSONファイル」に書き出す

保存関数はこう書きます。

def save_users(filename, users):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(users, f, ensure_ascii=False, indent=2)
Python

ここでのポイントは、

  • users は list(複数データ)
  • JSON に書き出すときは dump
  • 日本語対応のため ensure_ascii=False
  • 見やすくするため indent=2

という“お約束”を守ることです。


2日目のミニアプリ:ユーザー管理アプリ

「追加 → 保存 → 読み込み → 表示」の流れを作る

今日のミニアプリは、
ユーザーを追加して JSON に保存し、
次回起動時に復元するアプリです。


アプリの全体像

import json
import os

FILENAME = "users.json"

def load_users(filename):
    if not os.path.exists(filename):
        return []
    with open(filename, "r", encoding="utf-8") as f:
        return json.load(f)

def save_users(filename, users):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(users, f, ensure_ascii=False, indent=2)

def add_user(users):
    name = input("名前を入力してください: ")
    age_text = input("年齢を入力してください: ")

    try:
        age = int(age_text)
    except ValueError:
        print("年齢は数字で入力してください。0 として保存します。")
        age = 0

    user = {"name": name, "age": age}
    users.append(user)
    print("ユーザーを追加しました。")

def show_users(users):
    if not users:
        print("ユーザーはまだいません。")
        return

    print("=== ユーザー一覧 ===")
    for u in users:
        print(f"{u['name']} ({u['age']}歳)")

def main():
    users = load_users(FILENAME)
    print("JSONファイルから読み込みました。")

    while True:
        print("\n1: ユーザー追加")
        print("2: ユーザー一覧表示")
        print("0: 終了")
        choice = input("番号を選んでください: ")

        if choice == "1":
            add_user(users)
            save_users(FILENAME, users)
        elif choice == "2":
            show_users(users)
        elif choice == "0":
            save_users(FILENAME, users)
            print("終了します。")
            break
        else:
            print("正しい番号を入力してください。")

main()
Python

コードの重要ポイントを深掘りする

起動時に JSON を読み込む

users = load_users(FILENAME)
Python

これにより、
前回保存したユーザーが復元されます。

アプリが「前回の続き」から始まるのは
JSON 保存の最大のメリットです。


データを更新したらすぐ保存する

add_user(users)
save_users(FILENAME, users)
Python

データを変更したら、
その場で JSON に書き戻すのが安全です。

アプリが落ちてもデータが残るからです。


JSONは「アプリの外にあるデータベース」

今日のアプリでは、
JSON が「ユーザー一覧データベース」として機能しています。

Python の list/dict を
そのまま JSON に保存できるので、

  • 設定ファイル
  • Todoリスト
  • メモアプリ
  • 家計簿
  • 学習記録

など、あらゆるアプリに応用できます。


2日目で絶対に押さえておきたいこと

JSON保存アプリの基本パターン

今日の本質はこれです。

起動時:JSON → Python(load)
アプリ中:Pythonのデータを操作
保存時:Python → JSON(dump)

この流れを理解すれば、
どんなアプリでも「保存機能」が作れます。


次の日へのつながり

3日目では、
「データの検索・更新・削除」
を JSON 保存アプリに追加します。

つまり、

  • 特定のユーザーを探す
  • 年齢を変更する
  • ユーザーを削除する

といった「データ操作」を学びます。

ここまで来ると、
あなたはもう“本物のアプリ開発”の入り口に立っています。

タイトルとURLをコピーしました