PythonでJSONを使用する際の備忘録(追記あり)

先のエントリでも書いたが、JSONとは、JavaScriptの書き方に由来している軽量の「データ交換用のフォーマット」(lightweight data-interchange format)。

そんなJSONを使おうと思ったが、その前にどういう事をしたいのか、のまとめ

やりたい事

データ交換の為に、色々なフォーマットからJSONのフォーマットに置き換える。

ここではPythonのjsonモジュールを使って

PythonデータをJSONのフォーマットに変換(Serialization = encode)
そして逆に
JSONフォーマットのデータを元のデータ(Pythonデータ)に変換(Deserialization = decode)
をしたい。

Serialization (encode) = 元データ(ここではPythonデータ)をJSONのフォーマットに変換して対外的に書き出していく(writing)。
Deserialization (decode) = JSONフォーマットのデータを元のデータ(Pythonデータ)に変換して読み込んで(reading)、メモリに保存する。
(2021/5/8:追記)

Serialization

まずPythonデータ(Pythonのオブジェクト)をJSONのフォーマットに変換するのは2つの方法(dump()とdumps())がある。

dump()

データをfp(”.write()”がサポートされているfile-like-object)に変換(encode)する

dumps()

データをJSON形式のstrオブジェクトに変換(encode)する

Serializationの変換表は下記

PythonJSON
dictobject
list, tuplearray
strstring
int、float と int や float の派生列挙型number
Truetrue
Falsefalse
Nonenull
Serialization時の変換表

Deserialization

JSONのフォーマットのデータをPythonデータに変換するのは2つの方法(load()とloads())がある。

load()

 fp (.read() をサポートする JSON ドキュメント( text file もしくは binary file))を、Python オブジェクトに変換(decode)する。

loads()

 JSON ドキュメントを含んでいる strbytesbytearrayを、Python オブジェクトに変換(decode)する。

Deserializationの変換表は下記

JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone
Deserialization時の変換表

単純なSerializationの逆ではない点が興味深い。

list or tuple(Python)はEncode時にはarray(JSON)への変換だが、array(JSON)からのDecodeはlist(Python)への変換となる。

これは基本的にlistとarrayの変換関係にEncode時はtuple(Python)が加わったと差し支えなさそう。敢えてtupleにDecodeしたい場合には一手間掛かるだろう。

numberとint/floatの関係も、Pythonにおいてはintとfloatが分かれている為、Encode時はどちらもnumber(JSON)へ変換され、逆のDecode時にはint(整数)(JSON)はint(Python)へ、real(小数点のある自然数)(JSON)はfloat(Python)へ変換される。

この双方でずれがある所で運用時にエラーが出そうだな、と分かった所で今回は終了。

次回こそ使った所を。

コメント

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