Python の「 json
」というライブラリについてご紹介します。
import json
「 json
」は、その名のとおり JSON 形式の文字列やファイルを Python で扱うためのライブラリです。
json
ライブラリの魅力は、何といってもシンプルな点です。「 ElementTree
」などに見られるような高度な機能は備えていませんが、本当にシンプルなのですぐに使いはじめることができます。
以下、使い方を見ていきましょう。
json
で主に使う機能は次の2つです。
json.load(f)
json.dump(obj, f)
前者の load()
は JSON ファイルからデータを読み込むときに、 dump()
は JSON ファイルへとデータを書き込むときに使用します。まずは読み込みについて、続いて書き込みについて見ていきます。
JSONファイルの読み込み
import json
FILE_IN = 'sample_in.json'
f = open(FILE_IN, 'r')
data = json.load(f)
f.close()
open()で生成したファイルオブジェクトをload()関数に渡すことで、JSONファイルを読むことができます。
sample_in.json
には以下のようなテキストが含まれているものとします。
{
"version": "1.0",
"encoding": "UTF-8",
"feed": {
"title": {
"type": "text",
"$t": "Life with Python"
},
"entry": [{
},{
# エントリ1の中身
},{
# エントリ2の中身
}]
}
}
すると、 load()
の戻り値は dict
型のオブジェクトになります。
print type(data).__name__ # dict
load()
で生成されるのは、 str
や dict
、 list
等の組み込み型のオブジェクトです。ですので、いったん読み込んだら、あとは通常の組み込み型のデータとして扱うことができます。
print data['version'] # 1.0
print data['encoding'] # UTF-8
for k in data:
print k
# 以下のとおり表示
# feed
# version
# encoding
print data['feed']['title']['$t']
# Life with Pythonと表示
下の階層のデータを取得するには、このようにひとつずつ掘り下げていきます。このあたりもシンプルで、 ElementTree
などにあるような便利な機能はありません。
つづいて保存について見てみましょう。
JSON ファイルへの書き込み
FILE_OUT = 'sample_out.json'
f = open(FILE_OUT, 'w')
json.dump(data, f)
f.close()
ファイルに書き込むときに使うのは、 dump()
です。引数は最小で 2 つあり、ひとつめに書き込みたいオブジェクトを、ふたつめに書き込みモードで開いたファイルオブジェクトを渡します。
ここでは dict
型のデータについて見てみましたが、そのほかの形式については次のように対応しています。
対応関係
JSON の各型は次のとおりに Python の型にマッピングされます。 : の左が JSON の型、右が Python の型です。
object
:dict
array
:list
string
:unicode
int
: int,long
real
:float
true
:True
false
:False
null
:None
load()
のときは JSON → Python の方向での変換なので左から右に、 dump()
のときはその逆の右から左にイメージです。 True
や False
なんかもうまく変換してくれるようです。
このあたりについて詳しくは公式ドキュメントの Encoders and Decoders の部分 を参照されるとよいかと思います。
今回取り上げた load()
、 dump()
はファイルを対象とした関数ですが、それぞれに対応した文字列を対象とした関数も用意されています。関数名の末尾に s
をつけたものが文字列版です。
- loads(string)
- dumps(obj)
使い方も load()
、 dump()
と全く同じ感覚で使えるので、いったん文字列を取得してから使いたい場合なんかにはこちらを使うのがよいかと思います。
いずれの関数も細かいオプション設定ができるようになっているので、詳しくは公式のドキュメントなどをご参照ください。
コマンドラインでの使い方
json
ライブラリには、コマンドラインで使うためのツールも用意されています。その際に使用するのは、 json.tool
というモジュールです。
C:\>echo {"json": "obj", "json2": "obj2" } | python -m json.tool
{
"json": "obj",
"json2": "obj2"
}
C:\>echo [1, 2, 3] | python -m json.tool
[
1,
2,
3
]
これは Windows XP で実行した場合の結果です。細かな部分でのちがいはあるかと思うのですが、他の OS でもおおむね同じような形で使えるかと思います。
整形されていない JSON ファイルを整形したい場合なんかには次のようにすると手軽に整形することができます。
C:\>python -m json.tool < 未整形のjson > 整形後のjson
ちょっとしたときに便利ですね。
・・・余談ですが、この Blogger では、フィード URL に alt=json
というパラメータをつけるとフィードを JSON 形式で返してくれます。たとえばこのブログならこんな感じです。練習台として便利なのでよろしければどうぞ。