PythonのJSONエンコーダーおよびデコーダーパッケージ
JSONはJavaScriptObjectNotationの略です。軽量のデータ交換フォーマットです。漬物に似ています。ただし、ピクルスのシリアル化はPython固有ですが、JSON形式は多くの言語で実装されています。 Pythonの標準ライブラリのjsonモジュールは、pickleおよびmarshalモジュールと同様のオブジェクトシリアル化機能を実装しています。
pickleモジュールと同様に、jsonモジュールはPythonオブジェクトをJSONエンコードされた文字列にシリアル化するためのdumps()およびloads()関数も提供し、dump()およびload()関数はシリアル化されたPythonオブジェクトをファイルとの間で読み書きします。
dumps()
この関数は、オブジェクトをJSON形式に変換します。
load()
この関数は、JSON文字列をPythonオブジェクトに変換し直します。
次の例は、これらの関数の基本的な使用法を示しています。
>>> import json >>> data=['Rakesh',{'marks':(50,60,70)}] >>> s=json.dumps(data) >>> s '["Rakesh", {"marks": [50, 60, 70]}]' >>> json.loads(s) ['Rakesh', {'marks': [50, 60, 70]}]
dumps()関数は、オプションのsort_keys引数を取ることができます。デフォルトではFalseです。 Trueに設定すると、辞書キーはJSON文字列に並べ替えられた順序で表示されます。
>>> data={"marks":50, "age":20, "rank":5} >>> s=json.dumps(data, sort_keys=True) >>> s '{"age": 20, "marks": 50, "rank": 5}' >>> json.loads(s) {'age': 20, 'marks': 50, 'rank': 5}
dumps()関数には、数値を値として受け取るindentと呼ばれる別のオプションのパラメーターがあります。 pprint出力と同様に、json文字列のフォーマットされた表現の各セグメントの長さを決定します。
>>> data = ['Rakesh',{'marks':(50,60,70)}] >>> s = json.dumps(data, indent=2) >>> print (s) [ "Rakesh",{ "marks": [ 50, 60, 70 ] } ]
jsonモジュールには、上記の関数に対応するオブジェクト指向APIもあります。モジュールには、JSONEncoderとJSONDecoderの2つのクラスが定義されています。
JSONEncoderクラス
このクラスのオブジェクトは、Pythonデータ構造のエンコーダーです。次の表に示すように、各Pythonデータ型は対応するJSON型に変換されます。
Python | JSON |
---|---|
dict | オブジェクト |
リスト、タプル | 配列 |
str | 文字列 |
int、float、int-およびfloatから派生した列挙型 | 数値 |
True | 真 |
False | false |
なし | null |
JSONEncoderクラスは、JSONEncoder()コンストラクターによってインスタンス化されます。次の重要なメソッドがエンコーダクラスで定義されています
-
encode() −PythonオブジェクトをJSON形式にシリアル化します
-
iterencode() −オブジェクトをエンコードし、オブジェクト内の各アイテムのエンコードされた形式を生成するイテレータを返します。
-
インデント −エンコードされた文字列のインデントレベルを決定します
-
sort_keys −キーをソートされた順序で表示するかどうかを指定するには、trueまたはfalseのいずれかです。
-
Check_circular − Trueの場合、コンテナタイプオブジェクトの循環参照を確認します
次の例は、Pythonリストオブジェクトをエンコードします。
>>> e=json.JSONEncoder() >>> e.encode(data) '["Rakesh", {"marks": [50, 60, 70]}]'
iterencode()メソッドを使用すると、エンコードされた文字列の各部分が次のように表示されます
。>>> for obj in e.iterencode(data): print (obj) [ "Rakesh" { "marks" : [ 50 , 60 , 70 ] } ]
JSONDEcoderクラス
このクラスのオブジェクトは、json文字列でデコードしてPythonデータ構造に戻すのに役立ちます。このクラスの主なメソッドはdecode()です。次のサンプルコードは、前の手順でエンコードされた文字列からPythonリストオブジェクトを取得します。
>>> d=json.JSONDecoder() >>> d.decode(s) ['Rakesh', {'marks': [50, 60, 70]}]
ファイル/ストリームを使用したJSON
jsonモジュールは、オブジェクトのようなファイル(ディスクファイルやバイトストリームなど)にJSONデータを書き込み、それらからデータを読み取るためのload()関数とdump()関数を定義します。
dump()
この関数は、PythonオブジェクトデータをJSON形式でエンコードし、ファイルに書き込みます。ファイルには書き込み権限が必要です。
>>> data=['Rakesh', {'marks': (50, 60, 70)}] >>> fp=open('json.txt','w') >>> json.dump(data,fp) >>> fp.close()
このコードは、現在のディレクトリに「json.txt」を作成します。内容は以下のとおりです
["Rakesh", {"marks": [50, 60, 70]}]
load()
この関数は、ファイルからJSONデータをロードし、そこからPythonオブジェクトを構築します。ファイルは読み取り権限で開く必要があります。
>>> fp=open('json.txt','r') >>> ret=json.load(fp) >>> ret ['Rakesh', {'marks': [50, 60, 70]}] >>> fp.close()
この記事では、jsonモジュールの重要な機能について説明します。
-
Pythonコードのパッケージ化と公開?
Pythonは、パッケージを作成または公開するための非常に簡単な方法を提供します。 Pythonでのパッケージ管理は、さまざまなツールから利用できます- ピップ- オペレーティングシステムへのソフトウェアパッケージの手動インストールや更新を事実上排除するため、これは依然として推奨される選択肢の1つです。パッケージの完全なリストとそれに対応するバージョン番号を管理し、個別の個別の環境でパッケージグループ全体の正確な複製を促進します。 Python Package Index(PPI)は、pip.i.eを使用してインストールできるユーザー送信パッケージのパブリックパッケージリポジトリ
-
Python辞書をJSON形式に印刷する方法は?
JSONはJavascriptStandardObjectNotationの略です。 jsonと呼ばれるPythonモジュールは、JSONエンコーダー/デコーダーです。このモジュールのdumps()関数は、PythonディクショナリオブジェクトのJSON文字列表現を返します。 D1={"pen":25, "pencil":10, "book":100, "sharpner":5, "eraser":5} >>> import json >>> j=json.d