PythonでJSONをオブジェクトにシリアライズ/デシリアライズする方法

スポンサーリンク

今回は、PythonでJSONをオブジェクトに変換するSerializationとDeserializationの概念に焦点を当てたいと思います。

では、さっそく始めましょう!

データやAPIを扱うとき、私たちは辞書やJSON形式のデータに出会うことがあります。

時には、それらの間で相互変換を行うための関数が必要になります。

今回は、データのシリアライズとデシリアライズを行うためのメソッドをいくつか紹介します。

こちらもご覧ください。

スポンサーリンク

PythonでJSONデータをシリアライズする

シリアライズとは、生データのデータ型をJSON形式に変換することです。

つまり、通常は辞書として扱われる生データが、Javascript Object Notationの形式に従うようになるということです。

Pythonでは、以下のような関数を使って、簡単にJSON形式に変換することができます。

  1. json.dump()関数
  2. json.dumps()関数

json.dump()関数

json.dump()関数は、生データを入力として受け取り、JSON形式に変換してJSONファイルに格納する関数です。

構文は以下の通りです。

json.dump(data, file-object)
  • データ。JSON 形式に変換する必要がある実際のデータ。
  • file-object。変換後のデータが格納されるJSONファイルを指すオブジェクトです。ファイルが存在しない場合、オブジェクトが指す場所に新しいファイルが作成されます。

例えば、以下の様になります。

import json
  
data= {
    "details": {
        "name": "YZ",
        "subject": "Engineering",
        "City": "Pune"
    }
}
  
with open( "info.json" , "w" ) as x:
    json.dump( data, x )

json.dumps()関数

json.dumps()関数は、dump()関数とは異なり、生データをJSON形式に変換しますが、ファイルオブジェクトを指すのではなく、文字列として保存する関数です。

構文は以下の通りです。

json.dumps(data)

例えば、以下の様になります。

import json
  
data= {
    "details": {
        "name": "YZ",
        "subject": "Engineering",
        "City": "Pune"
    }
}
res = json.dumps(data)
print(res)

結果は以下の通りです。

{"details": {"name": "YZ","subject": "Engineering","City": "Pune"}}

JSONデータのデシリアライズ

デシリアライゼーションについて理解したところで、今度はその逆をやってみましょう。

つまり、デシリアライゼーションによって、JSONデータをデフォルト/ネイティブなデータ型(通常は辞書)に簡単に変換することができるのです。

Pythonでは、デシリアライズの概念を実装するために、以下の関数を提供しています。

  1. json.load()関数
  2. json.load()関数

json.load()関数

ここでは、load()関数により、JSONデータをネイティブな辞書形式に変換することができます。

構文は以下の通りです。

json.load(data)

例えば、以下の様になります。

この例では、まずopen()関数を使用してJSONファイルをロードしています。

その後、JSON ファイルを参照しているオブジェクトを load() 関数に渡して、辞書形式にデシリアライズしています。

import json
  
data = open('info.json',)
  
op = json.load(data)
  
print(op)
print("Datatype after de-serialization : " + str(type(op)))

結果は以下の通りです。

{"details": {"name": "YZ","subject": "Engineering","City": "Pune"}}
Datatype after de-serialization : <class 'dict'>

まとめ

ここまでで、このトピックは終了です。

何か質問があれば、お気軽にコメントください。

Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。

タイトルとURLをコピーしました