JSONで連想配列を扱う
連想配列をJSONにエンコードしてTCPやUDPで送ったり、JSONで書かれた設定ファイルを読み込むなど、最近使う機会が増えたのでメモ。
エンコード
連想配列のデータが頻繁に書き換わり、それらの内容を配列ごと通信で送りたい場合などは、JSONを使えば便利。
例えば何かの3次元座標を取得し、連想配列に格納するとする。
>>> import json
>>> list = {'x': 100, 'y': 200, 'z': 300}
>>> json.dumps(list)
'{"x": 100, "y": 200, "z": 300}'
今回の例は簡単なデータなので、わざわざ連想配列にする必要もないが、データの種類が多岐にわたる場合や、その順番をいちいち覚えてらんないときに、キーでデータが取り出せるというのはすごく楽。
JSONにエンコードしたデータを何らかの通信でどこかへ送る場合なんかも、キーさえ教えておけば、受け取る側はデータの取り出しが簡単になる。
そこで、JSONのデコード。
デコード
先ほど使ったlistをエンコードして、変数に代入し、それをデコードしてみる。
>>> import json
>>> list = {'x': 100, 'y': 200, 'z': 300}
>>> enc = json.dumps(list)
>>> print enc
'{"x": 100, "y": 200, "z": 300}'
>>> dec = json.loads(enc)
>>> print dec
{u'y': 200, u'x': 100, u'z': 300}
>>> print dec['x']
100
こんな感じ。
デコードしたあとは、中の要素の順番はばらばらになる。まあどうせ参照する際はキーで呼び出すので順番は関係ない。