json

【Python】JSONの読み込み/書き込み方法 ~dump, load, dumps, loads~

【Python】JSONの読み込み/書き込み方法 _dump, load, dumps, loads_

Pythonでjsonモジュールを用いてJSONの読み込み/書き込みを行う方法について解説します。

PythonでJSONデータの利用

PythonでJSON形式のデータを読み込み/書き込みをする場合には、jsonモジュールを使用します。

JSONとは「JavaScript Object Notation」の略で、JavaScriptのオブジェクトの書き方を元にしたデータ定義方法になっています。JavaScriptで使われることを想定して定義されたものですが、Pythonを含めた幅広い言語で使用でき、WebのREST APIにおけるデータのやり取りのためのデータ構造としても使用されています。

本記事では、jsonモジュールを使ってJSONを扱う方法について紹介します。

Note

jsonモジュールの公式ドキュメントはこちらを参照してください。

JSON形式ファイルの読み込み/書き込み方法 dump, load

jsonモジュールを使用してJSON形式ファイルの読み込み/書き込みを行う場合には、dump関数及びload関数を使用します。dump関数とload関数は以下のように使用します。

import json

# データを用意
data = {
    "data": [
        {"id": 1, "name": "Taro"},
        {"id": 2, "name": "Haruka"},
        {"id": 3, "name": "Sakura"},
    ]
}

# JSONファイルへの書き込み
with open("test.json", "w", encoding='utf-8') as f:
    json.dump(data, f)

# JSONファイルの読み込み
with open("test.json", "r", encoding='utf-8') as f:
    data_r = json.load(f)
    print(data_r)
    print(type(data_r))
【test.jsonのファイルの中身】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
【実行結果】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
<class 'dict'>

以降でポイントを説明します。

JSON ファイルの書き込み dump

JSONファイルへの書き込みを行っている部分は以下の部分です。

# JSONファイルへの書き込み
with open("test.json", "w", encoding='utf-8') as f:
    json.dump(data, f)

JSONファイルへ書き込みを行う場合には、open関数で.json拡張子のファイルをopenします。入力する辞書データ(data)とファイルオブジェクト(f)をdump関数の引数に渡すことでJSON形式でファイルを出力することができます。

【test.jsonのファイルの中身】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}

test.jsonの中身を見てみると、用意した辞書データと同じです。ただし、jsonではダブルクォーテーション(")で文字列を囲むことになっているので、シングルクォーテーション(')の文字列で辞書を作成していた場合はダブルクォーテーションに変換されます。

JSONファイルの読み込み load

JSONの読み込みを行っているのは以下の部分です。

# JSONファイルの読み込み
with open('test.json', 'r') as f:
    data_r = json.load(f)
    print(data_r)
    print(type(data_r))

JSONファイルへ読み込みを行う場合には、open関数でJSONファイルをopenします。データを読み込む際にはload関数を使用します。上記の例ではdata_rに読み込んで出力しています。

【実行結果】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
<class 'dict'>

実行結果を見てみるとPythonの辞書形式で読み込みがされていることがわかるかと思います。

Python辞書とJSON形式文字列間での変換 dumps, loads

上記では、JSON形式のファイルの読み込み/書き込みについて見てきました。プログラム内でPython辞書とJSON形式の文字列を変換する例を見ていきます。Python辞書とJSON形式文字列を変換する際には、dumps関数とloads関数を使用します。

ファイルの読み込み/書き込み時との違いは「s」があるかないかの違いですので注意しましょう。

import json

# データを用意
data = {
    "data": [
        {"id": 1, "name": "Taro"},
        {"id": 2, "name": "Haruka"},
        {"id": 3, "name": "Sakura"},
    ]
}

# JSON形式文字列への変換
json_data = json.dumps(data)
print(json_data)
print(type(json_data), "\n")

# JSON形式文字列を辞書へ変換
data_dic = json.loads(json_data)
print(data_dic)
print(type(data_dic))
【実行結果】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
<class 'str'> 

{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
<class 'dict'>

以降でポイントを説明します。

Python辞書→JSON形式文字列への変換 dumps

Pythonの辞書をJSON形式文字列に変換しているのは以下の部分です。

# JSON形式文字列への変換
json_data = json.dumps(data)
print(json_data)
print(type(json_data))

JSON形式文字列へ変換する際には、辞書をdumps関数の引数に渡します。typeで型を確認していますが、strとなっていることが分かるかと思います。

【実行結果抜粋】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
<class 'str'> 

JSON形式文字列→Python辞書への変換 loads

JSON形式文字列をPythonの辞書に変換しているのは以下の部分です。

# JSON形式文字列を辞書へ変換
data_dic = json.loads(json_data)
print(data_dic)
print(type(data_dic))

JSON形式文字列をPythonの辞書に変換する際には、loads関数にJSON形式の文字列を渡します。typeで型を確認していますが、dictになっていることが分かるかと思います。

【実行結果抜粋】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
<class 'dict'>