📢 この記事は gemini-2.5-flash によって翻訳されました
はじめに
あるすごい人からRecord TreeのJSONファイルをもらったから、ついでに
サッと何か書いとこう
。便利だし、忘れちゃったことのメモにもなるしね~(そうそう、ちょうど256番目の記事なんだよね)
でもさ、
PixivDownloader
でも使ったことあったのに、完全に忘れちゃってたんだよね。
JSONファイルを読み込む
読み込んだ後に返ってくる値はJSONファイルによって違うんだけど、Pythonのリストか辞書型に対応してるよ。
1
2
3
4
| import json
with open(FILE_PATH, "r", encoding="utf-8") as f:
jsonParse = json.load(f)
|
そしたら、jsonParse変数にいろんな操作ができるようになるんだ。
リスト
もしJSONファイルがこんな感じだったら
1
2
3
4
5
6
7
8
| [
{
"a": "b"
},
{
"c": "d"
}
]
|
そしたら、さっきの操作でjsonParseの外側はリストで、それぞれのリストの項目は辞書型になるよ。
辞書
もしJSONファイルがこんな感じだったら
1
2
3
4
5
| {
"a": {
"c": "d"
}
}
|
そしたら、さっきの操作でjsonParseは2層にネストされた辞書になるんだ。
操作
型がわかれば、このファイルに対する操作はPythonでの辞書やリストに対する操作と同じで大丈夫。例えば、このファイルの場合ね。
1
2
3
4
5
6
7
8
9
10
| [
{
"a": 1,
"b": 2
},
{
"c": 3,
"d": 4
}
]
|
1を出力するコード
1
2
3
4
5
6
7
| import json
with open(FILE_PATH, "r", encoding="utf-8") as f:
s = json.load(f)
print(s[0]["a"])
# または
print(s[0].get("a"))
|
4を100に修正するコード
1
2
3
4
5
| import json
with open(FILE_PATH, "r", encoding="utf-8") as f:
s = json.load(f)
s[1]["d"] = 100
|
項目を一つ追加して、ファイルをこんな感じにする
1
2
3
4
5
6
7
8
9
10
11
12
13
| [
{
"a": 1,
"b": 2
},
{
"c": 3,
"d": 4
},
{
"e": 5
}
]
|
要はリストに辞書を追加するってことなんだけど、コードはこれね。
1
2
3
4
5
| import json
with open(FILE_PATH, "r", encoding="utf-8") as f:
s = json.load(f)
s.append({"e": 5})
|
ループ処理
リストの場合は、リストのループ処理を使うよ。
辞書の場合は、辞書のループ処理を使うよ。
1
2
3
4
5
| for key, value in s.items():
print(key, value)
for key in s:
print(key)
|
保存
json.dumpを使う
1
2
3
4
5
6
| with open(FILE_PATH, "r", encoding="utf-8") as f:
s = json.load(f)
# 変数sに何か修正を加える
with open(FILE_PATH, "w", encoding="utf-8") as f:
json.dump(s, f, ensure_ascii=False, indent=2)
|
ensure_ascii=Falseは中国語文字が正しく書き込まれるようにするもので、indent=2はインデントがスペース2つ分になることを意味してるよ。