Python で JSON ファイルを扱う

📢 この記事は 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
for i in s:
    print(i)

辞書の場合は、辞書のループ処理を使うよ。

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つ分になることを意味してるよ。

This post is licensed under CC BY-NC-SA 4.0 by the author.

Visits Since 2025-02-28

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。