1日目のゴール
1日目のテーマは
「JSONって何者かを理解して、Pythonで“とりあえず保存して読み戻す”ところまでできるようになること」
です。
今日はまだ「アプリ」までは行きません。
でも、ここで学ぶ
- JSONというデータ形式のイメージ
- Pythonの
dict/listとJSONの対応関係 json.dump/json.loadでの保存・読み込み
この3つが、残り6日間のすべての土台になります。
JSONとは何かをイメージでつかむ
人間にも読めて、プログラムにも扱いやすい「データの箱」
JSONは、ざっくり言うと
「データをテキストで保存するためのルール」 です。
例えば、こんな情報があるとします。
- 名前: Taro
- 年齢: 25
これを日本語で書くと
名前: Taro, 年齢: 25
ですが、コンピュータにとっては
「どこからどこまでが名前で、どこからが年齢なのか」
が分かりにくい。
そこで、JSONではこう書きます。
{
"name": "Taro",
"age": 25
}
これなら、
"name"という項目に"Taro""age"という項目に25
が入っている、と機械的に判断できます。
しかも、人間が読んでも意味が分かる。
これがJSONの強みです。
Pythonのdict / listとJSONの関係
「Pythonの世界」と「ファイルの世界」をつなぐ橋
Pythonでデータを扱うとき、よく出てくるのが
- dict(辞書)
- list(リスト)
です。
例えば、1人のユーザーをPythonで表すとこうなります。
user = {
"name": "Taro",
"age": 25
}
Python複数のユーザーなら、こうです。
users = [
{"name": "Taro", "age": 25},
{"name": "Hanako", "age": 30}
]
PythonこれをJSONにすると、ほぼそのままの形で保存できます。
[
{"name": "Taro", "age": 25},
{"name": "Hanako", "age": 30}
]
ここで超重要なのは、
「Pythonのdict/listとJSONのオブジェクト/配列は、ほぼ1対1で対応している」
ということです。
- Pythonの
dict→ JSONの{ ... } - Pythonの
list→ JSONの[ ... ] - Pythonの
str→ JSONの文字列 - Pythonの
int/float→ JSONの数値 - Pythonの
True/False→ JSONのtrue/false - Pythonの
None→ JSONのnull
この対応関係さえ覚えれば、
「PythonのデータをそのままJSONに保存する」
という感覚がつかめます。
なぜCSVではなくJSONなのか
「表形式」か「構造を持ったデータ」か
中級編のタイトルに「CSVファイル読み書きアプリ」とありますが、
ここではあえてJSONを扱います。
CSVは「表形式のデータ」に向いています。
name,age
Taro,25
Hanako,30
一方で、JSONは
- 項目が増えたり減ったりしても対応しやすい
- 入れ子構造(中にさらにオブジェクトや配列)を持てる
- Web APIなどでも標準的に使われている
という特徴があります。
アプリで「ちょっと複雑なデータ」を扱いたくなったとき、
JSONはとても相性がいい形式です。
PythonでJSONを扱うための基本関数
jsonモジュールを使う
Pythonには、最初からJSONを扱うためのモジュールが用意されています。
import json
Pythonこのjsonモジュールには、主に次の4つの関数があります。
json.dump: Pythonのデータ → ファイルに書き出すjson.load: ファイル → Pythonのデータに読み込むjson.dumps: Pythonのデータ → JSON文字列に変換json.loads: JSON文字列 → Pythonのデータに変換
1日目では、まず
json.dumpjson.load
の2つに集中します。
まずは「1つのオブジェクト」を保存してみる
超シンプルな例:設定ファイルっぽいもの
たとえば、アプリの設定を保存したいとします。
- ユーザー名
- ダークモードかどうか
- 文字サイズ
これをPythonで表すとこうです。
settings = {
"username": "taro",
"dark_mode": True,
"font_size": 14
}
Pythonこれを settings.json に保存してみましょう。
import json
settings = {
"username": "taro",
"dark_mode": True,
"font_size": 14
}
with open("settings.json", "w", encoding="utf-8") as f:
json.dump(settings, f, ensure_ascii=False, indent=2)
Pythonここでのポイントを深掘りします。
ensure_ascii=False と indent=2 の意味
json.dump の引数でよく使うのが
ensure_ascii=Falseindent=2
の2つです。
ensure_ascii=False は、
日本語をそのままの形で保存するための指定です。
これを付けないと、日本語が \uXXXX のような形にエスケープされてしまい、
ファイルを開いたときに読みにくくなります。
indent=2 は、
JSONを見やすく整形してくれます。
例えば、上のコードで保存された settings.json はこうなります。
{
"username": "taro",
"dark_mode": true,
"font_size": 14
}
人間が見ても分かりやすいですよね。
「JSONは人間が読めるデータ形式」 という感覚を、ここでつかんでほしいです。
保存したJSONを読み戻してみる
json.loadでPythonの世界に戻す
さきほど保存した settings.json を、
別のPythonコードから読み込んでみます。
import json
with open("settings.json", "r", encoding="utf-8") as f:
settings = json.load(f)
print(settings)
print(type(settings))
Python実行すると、こんな感じになります。
{'username': 'taro', 'dark_mode': True, 'font_size': 14}
<class 'dict'>
Pythonつまり、
- JSONファイル → Pythonの
dictに戻ってきた
ということです。
ここが今日いちばん大事なポイントです。
「Pythonのdict/listをJSONに保存して、またdict/listとして戻せる」
これができるからこそ、
アプリの「状態」を丸ごとファイルに保存できるようになります。
1日目のミニ練習:お気に入りの本リストを保存する
複数データをJSONにしてみる
今度は、複数の本の情報を保存してみましょう。
1冊の本を、こういう形で表すことにします。
- title(タイトル)
- author(著者)
- pages(ページ数)
Pythonではこうです。
book1 = {"title": "独学プログラマー", "author": "コーリー", "pages": 300}
book2 = {"title": "リーダブルコード", "author": "Dustin", "pages": 250}
Python複数冊をリストにします。
books = [
{"title": "独学プログラマー", "author": "コーリー", "pages": 300},
{"title": "リーダブルコード", "author": "Dustin", "pages": 250}
]
Pythonこれを books.json に保存します。
import json
books = [
{"title": "独学プログラマー", "author": "コーリー", "pages": 300},
{"title": "リーダブルコード", "author": "Dustin", "pages": 250}
]
with open("books.json", "w", encoding="utf-8") as f:
json.dump(books, f, ensure_ascii=False, indent=2)
Pythonbooks.json を開くと、こうなります。
[
{
"title": "独学プログラマー",
"author": "コーリー",
"pages": 300
},
{
"title": "リーダブルコード",
"author": "Dustin",
"pages": 250
}
]
そして、読み戻すコードはこうです。
import json
with open("books.json", "r", encoding="utf-8") as f:
books = json.load(f)
for book in books:
print(f"{book['title']} / {book['author']} / {book['pages']}ページ")
Python実行すると、こんな表示になります。
独学プログラマー / コーリー / 300ページ
リーダブルコード / Dustin / 250ページ
ここまでできたら、
「JSONを使って、複数データを保存して読み戻す」
という1日目のゴールはクリアです。
1日目で絶対に押さえてほしいこと
キーワードを一気に整理する
今日の本質を、ぎゅっとまとめるとこうなります。
- JSONは「人間にも読めて、プログラムにも扱いやすいデータ形式」
- Pythonの
dict/listとJSONのオブジェクト / 配列はほぼ1対1で対応している json.dump/json.loadで「Pythonのデータ ↔ JSONファイル」を行き来できるensure_ascii=Falseとindent=2で「読めるJSON」を出力できる
この4つが、残り6日間のすべての土台です。
次の日へのつながり
2日目では、
「JSONに“アプリのデータ”を保存して、起動時に復元する」
という、いよいよ「アプリっぽい」流れに入っていきます。
今日やった
- dict / list でデータを持つ
- JSONに保存する
- JSONから読み戻す
この3ステップを、
「ユーザーが入力したデータ」に対して行う形に発展させていきます。
もしよかったら、
今のうちに自分の好きなデータ(映画リスト、ゲームリスト、行きたい場所リストなど)でxxx.json を作って遊んでみてください。
それがそのまま、明日以降の“あなた専用アプリ”の素材になります。

