ユーニックス総合研究所

  • home
  • archives
  • python-json-read

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_intparse_floatの整数版です。この関数は整数をパースする時に呼ばれます。

parse_constantにもオプションで関数を指定できます。これは次の文字列の時に呼ばれます。

  • -Infinity
  • Infinity
  • NaN
  • null
  • true
  • false

デコード中に不正な整数などを見つけた場合はInfinityNaNになるので、これを検出したい場合に指定します。

ファイルオブジェクトを読み込む

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, それは便利オブジェクト