この記事の内容
この記事では、PythonにてJSONのシリアライズとデシリアライズの方法について解説しています。
JSONのシリアライズおよびデシリアライズの方法を学習することで、
- REST APIのRequestに使用するJSONの生成
- REST APIのResponseから必要なデータの取得
などに役立てることができます。
この記事を読むことで、コードレベルでJSONのシリアライズとデシリアライズ方法を学ぶことができます。
まずは、JSONのシリアライズとデシリアライズの概要について説明していきます。
JSONのシリアライズとデシリアライズの概要
まず、コードレベルの解説を始める前に、シリアライズとデシリアライズのイメージについて、解説します。
以下の図をご覧ください。
まず、Pythonのオブジェクトや文字列をJSON形式に変換することをシリアライズといいます。
反対に、JSON形式のデータを、Pythonのオブジェクトや文字列に変換することをデシリアライズといいます。
JSONのシリアライズ
シリアライズには大きく分けて2種類あります。
- dump()を使用して、PythonオブジェクトをJSONファイルに保存する方法
- dumps()を使用して、PythonオブジェクトをJSON形式の文字列にする方法
シリアライズ時に、Pythonの型とJSONの型で違いがあります。
その際、型や値の形式が変換されます。
そのデフォルトの変換形式は以下になります。
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int、float と int や float の派生列挙型 | number |
True | true |
False | false |
None | null |
dump()を使用した、JSONファイルへのシリアライズ
dump()を使用して、JSONファイルへ保存するコードを記載します。
このコードでは、dataオブジェクトの内容を、sample.jsonへ出力します。
また、dump()関数の引数にindent = 4を指定することで、インデントが入った形で出力することができます。
import json data = { "user":{ "name":"ReMIX", "age": 31, "enabled" : False } } def main(file_path): with open(file_path, "w") as file: json.dump(data, file, indent=4) if __name__ == "__main__": file_path = 'sample.json' main(file_path)
dumps()を使用した、JSON形式文字列へのシリアライズ
dumps()を使用して、JSON形式への文字列を取得するコードを記載します。
このコードでは、dumps()の戻り値で取得したJSON形式の文字列をprint()関数で出力しています。
import json data = { "user":{ "name":"ReMIX", "age": 31, "enabled" : False } } def main(): json_string = json.dumps(data, indent=4) print(json_string) # >> { # >> "user": { # >> "name": "ReMIX", # >> "age": 31, # >> "enabled": false # >> } # >> } if __name__ == "__main__": main()
JSONのデシリアライズ
デシリアライズにもシリアライズと同じく、大きく分けて2種類あります。
- load()を使用して、JSONファイルからPythonオブジェクトを生成する方法
- loads()を使用して、JSON形式の文字列からPythonオブジェクトを生成する方法
シリアライズ時と同様に、デシリアライズ時にも型や値の形式が変換されます。
そのデフォルトの変換形式は以下になります。
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | 浮動小数点数 |
true | True |
false | False |
null | None |
load()を使用した、JSONファイルからのデシリアライズ
load()を使用した、JSONファイルからのデシリアライズの方法を記載します。
import json def main(file_path): with open(file_path, "r") as file: data = json.load(file) print(data) # >> {'user': {'name': 'ReMIX', 'age': 31, 'enabled': False}} if __name__ == "__main__": file_path = 'sample.json' main(file_path)
loads()を使用した、JSON形式文字列からのデシリアライズ
loads()を使用した、JSON形式文字列からのデシリアライズの方法を記載します。
import json def main(): json_string = """{ "user": {"name": "ReMIX", "age": 31}} """ data = json.loads(json_string) print(data) # >> {'user': {'name': 'ReMIX', 'age': 31}} if __name__ == "__main__": main()
まとめ
この記事では、以下について解説しました。
- JSONのシリアライズとデシリアライズの概要
- JSONのシリアライズ方法(dump(),dumps()を使用する方法)
- JSONのデシリアライズ方法(load(),loads()を使用する方法)
コメント