「PythonでJSONファイルを読み込みたい」
「PythonにおけるJSONの処理がややこしい・・・」
「load()とloads()の違いがよくわからない・・・」
このような場合には、この記事の内容が参考となります。
この記事では、PythonにおけるJSONの読み込みを解説しています。
本記事の内容
- JSONの読み込みには2つの意味がある
- load()によるJSONファイルの読み込み
- loads()によるJSON文字列の読み込み
それでは、上記に沿って解説していきます。
JSONの読み込みには2つの意味がある
JSONの読み込みという言葉には、次の2つの意味があります。
- JSONファイルの読み込み
- JSON文字列の読み込み
まずは、この違いを意識しましょう。
さらに、Pythonでは関数名もややこしいです。
それが余計にプログラマーを混乱させています。
関数名 | 処理 |
load() | JSONファイルの読み込み |
loads() | JSON文字列の読み込み |
とりあえずは、上記のイメージを掴んでください。
詳細は、下記で説明していきます。
以上、JSONの読み込みには2つの意味があることについて説明しました。
次は、load()によるJSONファイルの読み込みを説明します。
load()によるJSONファイルの読み込み
load()は、JSONファイルを読み込みます。
しかし、これは少し正確ではありません。
なぜなら、load()は単独でファイルを読み込めません。
あくまで、ファイルを読み込むのはoepn()です。
言葉で説明するより、コードを見た方が速いでしょう。
実際にコードを確認しましょう。
その際に読み込むのは、次のJSONファイルとします。
sample.json
{ "id" : 1, "name" : "ユーザー"}
このJSONファイルを読み込むコードは、以下。
import json with open("sample.json", mode='r') as f: dict_json = json.load(f) print(type(dict_json)) print(dict_json)
上記を実行した結果、以下が表示されます。
<class 'dict'> {'id': 1, 'name': 'ユーザー'}
コードを見ればわかるように、load()はファイルオブジェクトを引数に受け取っています。
あくまで、ファイルを直接読み込むのはopen()です。
そのため、open()・with文とload()はセットで覚えましょう。
なお、open関数とwith文については次の記事で説明しています。
あと、ポイントはload()が戻すデータ型ですね。
load()は、辞書型のデータを戻します。
以上、load()によるJSONファイルの読み込みを説明しました。
次は、loads()によるJSON文字列の読み込みを説明します。
loads()によるJSON文字列の読み込み
loads()は、JSON文字列を読み込みます。
loadsの「s」が、「string」の「s」だと覚えましょう。
そのように覚えれば、load()とloads()の区別ができます。
これもコードで確認しましょう。
import json json_str = """{ "id" : 2, "name" : "ゆーざー"}""" dict_json = json.loads(json_str) print(type(dict_json)) print(dict_json)
上記を実行した結果、以下が表示されます。
<class 'dict'> {'id': 2, 'name': 'ゆーざー'}
loads()の戻り値も辞書型です。
JSON形式は、利用する上で辞書型にしないと意味がないということなのでしょう。
上記のサンプルコードでは、文字列をコード上で表現しています。
しかし、通常はファイル上のJSONを対象にするはずです。
対象がファイルであれば、load()を使います。
しかし、loads()でも対応は可能です。
import json with open("sample.json", mode='r') as f: json_str = f.read() print(type(json_str)) dict_json = json.loads(json_str) print(type(dict_json)) print(dict_json)
ファイルオブジェクトから文字列に変換しています。
そうすれば、loads()が利用できます。
上記を実行した結果は、以下。
<class 'str'> <class 'dict'> {'id': 1, 'name': 'ユーザー'}
でも、これは明らかに無駄です。
ファイルを読み込むなら、load()を利用しましょう。
以上、loads()によるJSON文字列の読み込みを説明しました。