今更ながら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」というライブラリがあるので、そちらを使った方がいいかも。


http://code.google.com/p/jsonpickle/