【Python】「シリアライズ」「デシリアライズ」を詳細に徹底解説
スポンサードリンク
おはようございます。Shotaです。
今回の記事では、Pythonを使ってJSONのシリアライズとデシリアライズの方法について詳細に解説していきます。
JSONのシリアライズ及びデシリアライズの方法を学習することで、
この2つの方法に役立てることができます。
今回の記事を参考に、JSONデータでのシリアライズとデシリアライズの方法について詳細に学ぶことができるようになります。
それでは早速、本題に入りましょう。
シリアライズとは
Pythonを用いたシリアライズの方法について解説する前に、シリアライズの概念を理解しておく必要があります。
言い換えれば、様々な要素を組み合わせた複合的なデータやコンピュータで実行してるプログラムがメインメモリ上に展開しているオブジェクトなどを、一定のデータ形式や変換規則に則って文字列やバイト列に変換させて保存したり送信したりできるようにすることを意味します。
Pythonのオブジェクトや文字列をJSON形式に変換することをシリアライズ、反対にJSON形式のデータをPythonのオブジェクトや文字列に変換することをデシリアライズと言います。
Pythonでの実装
シリアライズ
シリアライズには大きく分けて二種類あります。
シリアライズする際にPythonとJSONの型で差があります。その際に、型や値の形式が変換されます。そのデフォルトの変換形式は以下の通りです。
Python | JSON |
---|---|
dict |
object |
list , tuple |
array |
str |
string |
int , float |
number |
True |
true |
False |
false |
None |
null |
dump()
でPythonオブジェクトをJSONファイルに保存する方法
# jsonライブラリのインポート import json # dataの定義 data = { "pokemon": { "name": "Mewtwo", "level": 50, "stock": False } } # dataオブジェクトの内容をsample.jsonに出力 def main(file_path): with open(file_path, 'w') as f: json.dump(data, f, indent=4) #indent=4と指定することで、インデントが入った状態で出力できる if __name__ == "__main__": file_path = 'sample.json' main(file_path)
▼sample.json
の内容
{ "pokemon": { "name": "Mewtwo", "level": 50, "stock": false } }
dumps()
でPythonオブジェクトをJSON形式の文字列に変換する方法
import json data = { "pokemon": { "name": "Mewtwo", "level": 50, "stock": False } } def main(): json_string = json.dumps(data, indent=4) print(json_string) if __name__ == "__main__": main()
▼出力
{ "pokemon": { "name": "Mewtwo", "level": 50, "stock": false } }
デシリアライズ
Pythonのデシリアライズも、シリアライズと同じように大きく2種類に分けられます。
load()
を利用して、JSONファイルからPythonオブジェクトを生成する方法
▼sample.json
のファイル内容
{ "pokemon": { "name": "Mewtwo", "level": 50, "stock": false } }
import json def main(file_path): with open(file_path, "r") as f: data = json.load(f) print(data) if __name__ == "__main__": file_path = 'sample.json' main(file_path)
▼出力結果
{'pokemon': {'name': 'Mewtwo', 'level': 50, 'stock': False}}
loads()
を利用して、JSON形式の文字列からPythonオブジェクトを生成する方法
import json def main(): json_string = """{ "pokemon": {"name": "Mewtwo", "level": 50, "stock": false}} """ data = json.loads(json_string) print(data) if __name__ == '__main__': main()
▼出力結果
{'pokemon': {'name': 'Mewtwo', 'level': 50, 'stock': False}}
まとめ
今回の記事では、Pythonにおける「シリアライズ」と「デシリアライズ」の方法について詳細に解説しました。
今回の記事はこれで以上です。
【参考サイト】