Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python】「シリアライズ」「デシリアライズ」を詳細に徹底解説


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20220103085303p:plain

おはようございます。Shotaです。

今回の記事では、Pythonを使ってJSONシリアライズとデシリアライズの方法について詳細に解説していきます。

JSONシリアライズ及びデシリアライズの方法を学習することで、

この2つの方法に役立てることができます。

今回の記事を参考に、JSONデータでのシリアライズとデシリアライズの方法について詳細に学ぶことができるようになります。

それでは早速、本題に入りましょう。



シリアライズとは

f:id:ShotaNukumizu_1000:20220103085401p:plain

Pythonを用いたシリアライズの方法について解説する前に、シリアライズの概念を理解しておく必要があります。

  • シリアライズとは、複数の要素を一列に並べる操作や処理のこと。単にシリアライズといった場合には、プログラムの実行状態や複雑なデータ構造などを一つの文字列やバイト列で表現する「直列化」を指すことが多い。(引用: e-Words)


言い換えれば、様々な要素を組み合わせた複合的なデータやコンピュータで実行してるプログラムがメインメモリ上に展開しているオブジェクトなどを、一定のデータ形式や変換規則に則って文字列やバイト列に変換させて保存したり送信したりできるようにすることを意味します。

Pythonのオブジェクトや文字列をJSON形式に変換することをシリアライズ、反対にJSON形式のデータをPythonのオブジェクトや文字列に変換することをデシリアライズと言います。


Pythonでの実装


シリアライズ

シリアライズには大きく分けて二種類あります。

  • dump()PythonオブジェクトをJSONファイルに保存する方法
  • dumps()PythonオブジェクトをJSON形式の文字列に変換する方法


シリアライズする際にPythonJSONの型で差があります。その際に、型や値の形式が変換されます。そのデフォルトの変換形式は以下の通りです。

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オブジェクトを生成する方法
  • loads()を利用して、JSON形式の文字列からPythonオブジェクトを生成する方法


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}}


まとめ

f:id:ShotaNukumizu_1000:20220102090648p:plain

今回の記事では、Pythonにおける「シリアライズ」と「デシリアライズ」の方法について詳細に解説しました。

今回の記事はこれで以上です。

【参考サイト】

e-words.jp

remix-yh.net