先のエントリでも書いたが、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の変換表は下記
Python | JSON |
dict | object |
list, tuple | array |
str | string |
int、float と int や float の派生列挙型 | number |
True | true |
False | false |
None | null |
Deserialization
JSONのフォーマットのデータをPythonデータに変換するのは2つの方法(load()とloads())がある。
load()
fp (.read()
をサポートする JSON ドキュメント( text file もしくは binary file))を、Python オブジェクトに変換(decode)する。
loads()
JSON ドキュメントを含んでいる str
, bytes
, bytearray
を、Python オブジェクトに変換(decode)する。
Deserializationの変換表は下記
JSON | Python |
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
単純な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)へ変換される。
この双方でずれがある所で運用時にエラーが出そうだな、と分かった所で今回は終了。
次回こそ使った所を。
コメント