今更ながらjsonを使いました
Python2.6になって、jsonが標準モジュールになりましたね。
JavaScriptとの連携をするつもりはないんですが、可読性のあるpickleとして使えるかなと思いました。
import json a = { "name":"Tim", "age":19, "email":"tim@timcity.com", "visible":True } json.dump(a, open('output.json','w'))
■output.json
{"visible": true, "age": 19, "name": "Tim", "email": "tim@timcity.com"}
ちゃんとファイルに出力されましたね。
(よくサンプルで見かけるjson.dumps()は、ファイルではなく文字列に出力します)
でも長い1行で出力されてるため、可読性に問題ありですよね。
複数行に分割しインデントを付けて欲しい場合は、indent引数にインデント数を指定します。
辞書キーをソートしてほしい場合は、sort_keys引数にTrueを指定します。
標準では「:」と「,」の区切り文字の後ろに空白が挿入されています、separators引数で空白も削除する事ができます。
import json a = { "name":"Tim", "age":19, "email":"tim@timcity.com", "visible":True } json.dump(a, open('output.json','w'), indent=2, separators=(',',':'), sort_keys=True )
■output.json
{ "age":19, "email":"tim@timcity.com", "name":"tim", "visible":true }
これで人が読みやすい形になりましたね。
保存したファイルを読みだすコードは以下の通り。
import json a = json.load(open('output.json','r'))
ちなみに独自拡張のエンコードとデコードをしたい場合は、以下のページを参考にしてください(手抜き)
http://gihyo.jp/dev/serial/01/pythonhacks/0011
個人的には、独自拡張のエンコードとデコードを書くくらいなら、pickleを使うかな・・・
どうしてもjsonを使いたいという方には「jsonpickle」というライブラリがあるので、そちらを使った方がいいかも。