Python
 Computer >> コンピューター >  >> プログラミング >> Python

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モジュールの重要な機能について説明します。


  1. Pythonコードのパッケージ化と公開?

    Pythonは、パッケージを作成または公開するための非常に簡単な方法を提供します。 Pythonでのパッケージ管理は、さまざまなツールから利用できます- ピップ- オペレーティングシステムへのソフトウェアパッケージの手動インストールや更新を事実上排除するため、これは依然として推奨される選択肢の1つです。パッケージの完全なリストとそれに対応するバージョン番号を管理し、個別の個別の環境でパッケージグループ全体の正確な複製を促進します。 Python Package Index(PPI)は、pip.i.eを使用してインストールできるユーザー送信パッケージのパブリックパッケージリポジトリ

  2. 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