PythonでJSONの読み込み: load(), loads()の使い方
- 作成日: 2021-05-13
- 更新日: 2023-12-24
- カテゴリ: Python
PythonでJSONの読み込み
JSON, それはデータ・フォーマットです。
PythonではこのJSON形式で記述されたテキストやファイルを読み込み、Pythonのオブジェクトに変換することができます。
この記事ではPythonでJSONデータを読み込む方法を解説します。
結論から言うと↓のような方法でJSONを読み込むことができます。
import json
with open('data.json', 'rb') as fin:
d = json.load(fin) # ファイルオブジェクトをオブジェクトに変換
print(d)
# {'a': 1, 'b': 2}
s = '{"a": 1, "b": 2}'
d = json.loads(s) # 文字列のJSONをオブジェクトに変換
print(d)
# {'a': 1, 'b': 2}
この記事ではJSONの読み込みについて具体的に↓を見ていきます。
- 直列化と脱直列化
- jsonのインポート
- json.load()でファイルオブジェクトを読み込む
- json.loads()で文字列を読み込む
直列化と脱直列化
PythonのオブジェクトをJSONフォーマットの文字列に変換することを直列化(ちょくれつか)と言います。
また、その逆にJSONフォーマットの文字列をPythonのオブジェクトに変換することを脱直列化(だつちょくれつか)と言います。
直列化はエンコード、脱直列化はデコードとも言います。
jsonのインポート
今回使うPythonのライブラリはjson
という標準ライブラリです。
このjson
を使うと文字列やファイルオブジェクトをPythonのオブジェクトに変換することができます。
json
は↓のようにインポートします。
import json
json.load()でファイルオブジェクトを読み込む
JSON形式で書かれたテキストファイルなどをopen()
等で開くとそれはファイルオブジェクトになりますが、ファイルオブジェクトをPythonのオブジェクトに変換するにはjson.load()
を使います。
json.load()の構造
json.load()
は↓のような構造になっています。
json.load(
fp,
*,
cls=None,
object_hook=None,
object_pairs_hook=None,
parse_float=None,
parse_int=None,
parse_constant=None,
**kw,
)
第1引数のfp
にはファイルオブジェクトを渡します。
これはテキストファイルまたはバイナリファイルです。
この入力が不正なJSON形式だった場合JSONDecodeError
が送出されます。
cls
にはデコーダーを指定します。デフォルトではJSONDecoder
が指定されます。
object_hook
にはオプションの関数を指定します。この関数にはデコード中のオブジェクトが渡されます。
object_pairs_hook
もオプションの関数です。この関数にはデコード中のオブジェクトのタプルが渡されます。
parse_float
にもオプションで関数を指定できます。この関数は1.23
などの浮動小数点数をパースする時に呼ばれます。
引数には浮動小数点数の文字列が渡されます。関数の返り値にfloat
を返すことでその結果がオブジェクトに保存されます。
parse_int
はparse_float
の整数版です。この関数は整数をパースする時に呼ばれます。
parse_constant
にもオプションで関数を指定できます。これは次の文字列の時に呼ばれます。
- -Infinity
- Infinity
- NaN
- null
- true
- false
デコード中に不正な整数などを見つけた場合はInfinity
やNaN
になるので、これを検出したい場合に指定します。
ファイルオブジェクトを読み込む
json.load()
で例えばdata.json
というファイルを読み込みたい場合は↓のようにします。
import json
with open('data.json', 'rb') as fin:
d = json.load(fin) # ファイルオブジェクトfinをデコードする
print(d)
# {'a': 1, 'b': 2}
data.json
の中身は↓のようになっています。
{
"a": 1,
"b": 2
}
結果を見てもわかるようにjson.load()
の返り値はPythonの辞書です。
with open('data.json', 'rb') as fin:
d = json.load(fin) # ファイルオブジェクトfinをデコードする
print(type(d))
# <class 'dict'>
よってjson.load()
でオブジェクトにデコードしたあとは普通の辞書と同等に扱うことができます。
with open('data.json', 'rb') as fin:
d = json.load(fin) # ファイルオブジェクトfinをデコードする
for k, v in d.items():
print(k, v)
# a 1
# b 2
json.loads()で文字列を読み込む
JSONのフォーマットで記述された文字列をPythonのオブジェクトに変換するにはjson.loads()
を使います。
json.loads()
は↓のような構造になっています。
json.loads(
s,
*,
cls=None,
object_hook=None,
object_pairs_hook=None,
parse_float=None,
parse_int=None,
parse_constant=None,
**kw,
)
json.loads()
の第1引数には文字列(str
)、あるいはバイト列(bytes
)、あるいはバイト配列(bytearray
)を指定します。
json.loads()
の引数は第1引数を除いてjson.load()
と同じです。
詳細については先述のjson.load()
の解説をご覧ください。
json.loads()
で文字列をオブジェクトにデコードする場合は↓のようにします。
import json
s = '{"a": 1, "b": 2}'
d = json.loads(s)
print(d)
# {'a': 1, 'b': 2}
おわりに
今回はPythonでJSONを読み込む方法を解説しました。
json.load()
とjson.loads()
は名前が似ているので紛らわしいですが、間違えて使わないようにこの記事をブックマークしておいてくださいね。
ではJSONを扱う者よ、健闘を祈ります。
🦝 < JSON, それは便利オブジェクト