Python - JSONファイル読み書きする方法

jsonライブラリを使用してJSONファイルを読み取り、データをJSON形式で保存することができます。

次の内容につきどのように実装するかを知ってみましょう。

JSON形式でファイルに保存

jsonライブラリは、Pythonのdict、listオブジェクトを直接JSONファイルとして保存することができように助けてくれます。

以下は、dictオブジェクトをJSONファイルとして保存する例を示します。

import json

file_path = "./sample.json"

data = {}
data['posts'] = []
data['posts'].append({
    "title": "How to get stroage size",
    "url": "https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/",
    "draft": "false"
})
data['posts'].append({
    "title": "Android Q, Scoped Storage",
    "url": "https://codechacha.com/ko/android-q-scoped-storage/",
    "draft": "false"
})
print(data)

with open(file_path, 'w') as outfile:
    json.dump(data, outfile)

sample.jsonファイルを出力してみると、次のとおりです。

$ cat sample.json
{"posts": [{"title": "How to get stroage size", "url": "https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/", "draft": "false"}, {"title": "Android Q, Scoped Storage", "url": "https://codechacha.com/ko/android-q-scoped-storage/", "draft": "false"}]}

上記のsample.jsonファイルは空白が削除されたため表示は困難です。

上記のコードで json.dump()indentオプションを与える見事writeになります。

with open(file_path, 'w') as outfile:
    json.dump(data, outfile, indent=4)

indentオプションを適用した結果は次のとおりです。

{
    "posts": [
        {
            "title": "How to get stroage size",
            "url": "https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/",
            "draft": "false"
        },
        {
            "title": "Android Q, Scoped Storage",
            "url": "https://codechacha.com/ko/android-q-scoped-storage/",
            "draft": "false"
        }
    ]
}

JSONファイルの読み取り

JSONファイルを読んdictオブジェクトにすることができます。

以下は、 sample.jsonファイルを読んでdictにインポート例です。

import json

file_path = "./sample.json"
with open(file_path, "r") as json_file:
    json_data = json.load(json_file)
    print(json_data)
    print("")
    print(json_data['posts'])
    print("")
    print(json_data['posts'][0]['title'])

結果

{'posts': [{'title': 'How to get stroage size', 'url': 'https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/', 'draft': 'false'}, {'title': 'Android Q, Scoped Storage', 'url': 'https://codechacha.com/ko/android-q-scoped-storage/', 'draft': 'false'}]}

[{'title': 'How to get stroage size', 'url': 'https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/', 'draft': 'false'}, {'title': 'Android Q, Scoped Storage', 'url': 'https://codechacha.com/ko/android-q-scoped-storage/', 'draft': 'false'}]

How to get stroage size

既存のJSONファイルに内容を追加して再保存

既存のJSONファイルを読んで、そこにアイテムをもう1つ追加して再保存することもできます。

以下は、既存のsample.jsonを読んで、そこにリストを一つ追加して再保存する例を示します。

import json

file_path = "./sample.json"
json_data = {}
with open(file_path, "r") as json_file:
    json_data = json.load(json_file)

json_data['posts'].append({
    "title": "How to parse JSON in android",
    "url": "https://codechacha.com/ko/how-to-parse-json-in-android/",
    "draft": "true"
})

with open(file_path, 'w') as outfile:
    json.dump(json_data, outfile, indent=4)

sample.jsonに保存された内容

{
    "posts": [
        {
            "title": "How to get stroage size",
            "url": "https://codechacha.com/ko/get-free-and-total-size-of-volumes-in-android/",
            "draft": "false"
        },
        {
            "title": "Android Q, Scoped Storage",
            "url": "https://codechacha.com/ko/android-q-scoped-storage/",
            "draft": "false"
        },
        {
            "title": "How to parse JSON in android",
            "url": "https://codechacha.com/ko/how-to-parse-json-in-android/",
            "draft": "true"
        }
    ]
}

参考

Related Posts

codechachaCopyright ©2019 codechacha