路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

pythonでjsonとたわむれる

2011-02-16 19:17:43 | プログラミング
● jsonの文法チェック

demjsonというモジュールで文法チェックすることができます。
インストールの方法は記事の下の方に

あるjsonファイルを厳密に(RFC4627的に)lintするには、
$jsonlint -v hoge.json

あるjsonファイルを緩く(JavaScript的に)lintするには、
$jsonlint -v -S hoge.json

● jsonのプリティプリント

厳密なjsonなら、標準モジュールjsonを使って、
$python -mjson.tool hoge.js
とできます。

緩いjsonも扱う必要があるなら、標準モジュールjsonと、上のdemjsonを組み合わせて使うことでできます。

以下のようなスクリプト(ppjson.pyとする)を用意して、
---------------------------
import demjson, json
import sys

with open(sys.argv[1], "rb") as f: j = demjson.decode(f.read(), encoding="utf-8")
us = json.dumps(j, sys.stdout, indent=4, ensure_ascii=False)
print us.encode(sys.getfilesystemencoding())
---------------------------

コマンドラインから
$python ppjosn.py hoge.js
としてください。

注)Windowsの場合、ppjson.pyは結果をシフトJISで出力します。jsonファイルはutf-8でエンコードされているので、文字コードが変換されたことになります。
もし、出力もutf-8にしたいのであれば、最後の行(print ...)を修正して、明示的にutf-8にエンコードするようにしてください。

● demjsonのインストール

Ubuntuでインストールする場合は、いつも通りの
$sudo apt-get install python-demjson
で完了です。

Windowsの場合は、
http://deron.meranda.us/python/demjson/
から
demjson-1.5.tar.gz
を(2010/02/16現在)ダウンロードして展開し、

コマンドプロンプトでsetup.pyがあるディレクトリにcdして、

python setup.py install
とします。

さらに、jsonlintはインストールされないようなので、

展開したディレクトリにあるjsonlintという(拡張子無しの)ファイルを、jsonlint.pyとリネームして、適当なディレクトリにコピーしてください。

これで、jsonlintをコマンドラインで以下のように使えるようになります。
python jsonlint.py -v hoge.json

(2011/02/17 一部修正)

最新の画像もっと見る