pythonのjson.dumpで日本語出力

pythonjsonモジュール便利です。jsonのファイル作るのに助けて貰ってます。
ただ、特に何もしないと日本語になってないのでファイルを見た時にわけわからなくて困ります。直接編集出来ませんし。

なので日本語で吐き出す方法について記載します。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import json, codecs

data = {
  u"first": u"Hello world",
  u"second": u"今日は\n晴れです",
  u"third": 3
}

f = codecs.open("hoge.json", "w", "utf-8")
json.dump(data, f, indent=2, sort_keys=True, ensure_ascii=False)
f.close()

indentを指定してやると整形してくれます。
sort_keysをTrueにするとkeyで並び替えてくれます。

ensure_asciiがキモで、これをFalseにすると日本語で読める形に出力してくれます。
ただprintでちょろっと見る分には問題ないんですが、ファイルに書きこもうとすると

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-3: ordinal not in range(128)

となってしまいます。

そこでcodecsモジュールを使い対応します。
以上を踏まえた上で上記のプログラムを実行するとエラーが出ずに処理されるはずです。

ちなみにevalで行う方法もあるみたいです。
ただし文字列に改行コードが入っていると一緒に評価されて改行してしまうのでファイル出力目的だと使わない方が良さそうです。