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

Web APP Python
スポンサーリンク

1日目のゴール

1日目のテーマは
「JSON というデータ保存形式を知る」
「Python で JSON を読み書きしてみる」
この2つです。

今日はまだ「アプリ」というより、
JSON という“箱”の正体を理解して、
Python からその箱にデータを入れたり出したりする感覚をつかむ日です。


JSONってそもそも何者?

人間にもコンピュータにも読みやすい「データの形」

JSON(ジェイソン)は
「JavaScript Object Notation」の略ですが、
今はほぼ「世界共通のデータの書き方」として使われています。

例えば、こんな形です。

{
  "name": "Taro",
  "age": 25,
  "languages": ["Python", "JavaScript"]
}

ここで見てほしいのは次のポイントです。

キーと値のペアが並んでいる(”name”: “Taro” など)
文字列はダブルクォーテーションで囲む
配列(リスト)は [] で書く

Python の辞書やリストに、とてもよく似ていますよね。
だからこそ、Python と JSON は相性がいいんです。


PythonのデータとJSONの対応関係

「Pythonの世界」と「JSONの世界」を対応づける

まずは、Python のデータと JSON の対応を
ざっくり頭に入れておきましょう。

Python の辞書(dict)は、JSON のオブジェクトに対応します。

data = {
    "name": "Taro",
    "age": 25,
    "languages": ["Python", "JavaScript"]
}
Python

これは JSON にすると、ほぼそのままです。

{
  "name": "Taro",
  "age": 25,
  "languages": ["Python", "JavaScript"]
}

Python のリストは、JSON の配列に対応します。

numbers = [1, 2, 3]
Python

JSON ではこうです。

[1, 2, 3]

Python の True / False / None
JSON では true / false / null になります。

この「対応関係」を知っておくと、
「Python のデータを JSON に保存する」
「JSON を読み込んで Python のデータにする」
という変換が、イメージしやすくなります。


PythonでJSONを扱う標準ライブラリ

jsonモジュールを使う

Python には、最初から JSON を扱うための
json というモジュールが用意されています。

まずはインポートします。

import json
Python

この json モジュールには、よく使う関数が4つあります。

json.dumps
Python のデータ → JSON文字列 に変換する。

json.loads
JSON文字列 → Python のデータ に変換する。

json.dump
Python のデータ → JSON をファイルに書き出す。

json.load
ファイルから JSON を読み込んで → Python のデータ にする。

1日目では、特に
json.dumpjson.load をしっかり触っていきます。


まずはJSON文字列との変換を試してみる

dumpsとloadsで「行き来」してみる

いきなりファイルに行く前に、
まずは「Python ⇔ JSON文字列」の変換を体験しましょう。

import json

data = {
    "name": "Taro",
    "age": 25,
    "languages": ["Python", "JavaScript"],
    "is_active": True
}

json_text = json.dumps(data, ensure_ascii=False, indent=2)

print(json_text)
Python

ここでのポイントを説明します。

json.dumps(data, ...)
Python の data を JSON 形式の「文字列」に変換します。

ensure_ascii=False
日本語をそのまま表示したいときにほぼ必須です。
True のままだと、日本語が \uXXXX のような形にエスケープされます。

indent=2
見やすいように、2スペースでインデントして整形してくれます。

出力はこんな感じになります。

{
  "name": "Taro",
  "age": 25,
  "languages": [
    "Python",
    "JavaScript"
  ],
  "is_active": true
}

ここで、「Python の dict が JSON 文字列になった」
という感覚をつかんでください。

逆に、JSON文字列から Python に戻すには loads を使います。

text = '{"x": 1, "y": 2}'

data = json.loads(text)

print(data)        # {'x': 1, 'y': 2}
print(type(data))  # <class 'dict'>
Python

これで、「JSON は Python の dict / list と行き来できる」
というイメージが固まります。


JSONファイルに保存してみる

json.dumpでファイルに書き出す

いよいよ「保存」らしくなってきます。
Python のデータを JSON ファイルに書き出してみましょう。

import json

data = {
    "name": "Taro",
    "age": 25,
    "languages": ["Python", "JavaScript"],
    "is_active": True
}

with open("user_data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
Python

ここでの重要ポイントを深掘りします。

with open("user_data.json", "w", encoding="utf-8") as f:
"w" は書き込みモードです。
encoding="utf-8" をつけることで、日本語も安全に扱えます。
with を使うことで、処理が終わったら自動でファイルを閉じてくれます。

json.dump(data, f, ...)
dumps は「文字列にする」でしたが、
dump は「ファイルオブジェクト f に直接書き込む」です。

ensure_ascii=False, indent=2
さっきと同じく、日本語をそのまま・見やすく整形して保存します。

このコードを実行すると、
カレントディレクトリに user_data.json というファイルができます。
中身を開くと、さっきの JSON がそのまま入っているはずです。


JSONファイルから読み込んでみる

json.loadでPythonのデータに戻す

今度は、さっき保存した user_data.json
Python で読み込んでみます。

import json

with open("user_data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

print(data)
print(type(data))
print(data["name"])
print(data["languages"])
Python

ここでの流れを整理します。

open("user_data.json", "r", encoding="utf-8")
今度は "r" なので読み込みモードです。

json.load(f)
ファイル f の中身を JSON として読み込み、
Python のデータ(この場合は dict)に変換してくれます。

data["name"]data["languages"]
普通の dict と同じようにアクセスできます。
つまり、「保存したときの構造」がそのまま戻ってきます。

ここで、「JSONファイルは、Python のデータをそのまま保存しておける箱」
という感覚がかなりはっきりしてくるはずです。


1日目の小さな「JSON保存アプリ」を作る

ユーザー情報を入力してJSONに保存する

1日目の締めとして、
超シンプルな「JSON保存アプリ」を作ってみましょう。

やりたいことはこうです。

名前と年齢を入力する
Python の dict にまとめる
JSON ファイルに保存する
保存したファイルを読み込んで、内容を表示する

コードはこんな感じです。

import json

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

try:
    age = int(age_text)
except ValueError:
    print("年齢は数字で入力してください。とりあえず 0 扱いにします。")
    age = 0

user = {
    "name": name,
    "age": age
}

with open("user_profile.json", "w", encoding="utf-8") as f:
    json.dump(user, f, ensure_ascii=False, indent=2)

print("user_profile.json に保存しました。")

with open("user_profile.json", "r", encoding="utf-8") as f:
    loaded_user = json.load(f)

print("ファイルから読み込んだデータ:", loaded_user)
print("名前:", loaded_user["name"])
print("年齢:", loaded_user["age"])
Python

ここでの重要ポイントを整理します。

input で文字列として受け取る
年齢は int に変換しておく(数字として扱いたいから)
dict にまとめる(”name” と “age” のペア)
json.dump でファイルに保存する
json.load でファイルから読み込んで、同じ dict に戻る

これだけで、
「ユーザー情報を JSON として保存して、あとから読み出す」
という、立派な“データ保存アプリの最初の一歩”になっています。


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

JSONは「Pythonのdictとlistをそのまま外に出したもの」

今日の本質はここです。

Python の dict / list でデータを持つ
それを JSON に変換してファイルに保存できる
あとから JSON を読み込んで、同じ dict / list に戻せる

技術的には、次の4つがキーワードです。

json.dumps / json.loads
文字列との変換。
「とりあえず中身を見たい」ときにも便利。

json.dump / json.load
ファイルとの変換。
「アプリとしてデータを保存する」ための基本。

ensure_ascii=False
日本語を扱うときは、ほぼセットで書くと覚えてOKです。

indent=2
人間が読むときにうれしい整形。
デバッグや確認のときにとても役立ちます。


次の日へのつながり

2日目から「アプリっぽさ」を足していく

1日目は、あえて「素の JSON」と「基本の読み書き」に集中しました。

2日目以降は、

複数ユーザーをリストで保存する
アプリ起動時に JSON を読み込んで「前回の状態」を復元する
データを更新して、もう一度 JSON に書き戻す

といった、「アプリとしての JSON 保存」に近づけていきます。

今日の段階で、

「JSON は怖いものじゃない」
「Python の dict / list とほぼ同じ感覚で扱える」

ここまで感じられていれば、
中級編のスタートとしては最高です。

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