Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

Pythonの基礎 ファイル(JSON)の読み込み編

Pythonの基礎 JSONの読み込み編

JSONを読み込む

Webサービスでは、例えばどこかのサービスが提供しているAPIにアクセスして 情報をもらい、それを編集しえ自らのサイトに反映させるということがあります。

その際の情報の提供は、大抵の場合にはJSONまたはXMLとなると思います。

XMLもJSONもシンプルな仕様で理解しやすいため、広く使われていますね。

JSONについては説明不要だと思いますが、以下の公式サイトの図がとても分かりやすいです。

JSON.ORG

Pythonの公式サイトをチェックしてみる

Python JSONのところ

とりあえずサンプルコードをそのまま見てみましょう

このようなjsonがあるとします。
{"group2":{"Eric":44, "ken":33, "John":44, "Mike":99},"group1":{"Adam":40, "David":71, "Chris":60, "Bob":74}}

dumps()で表示してみる

以下のようなPythonコードを試してみましょう。

#coding:utf-8
import json

f = open('data.json', 'r')

jsonData = json.load(f)

print json.dumps(jsonData, sort_keys = True, indent = 4)

f.close()
#実行結果
{
    "group1": {
        "Adam": 40,
        "Bob": 74,
        "Chris": 60,
        "David": 71
    },
    "group2": {
        "Eric": 44,
        "John": 44,
        "Mike": 99,
        "ken": 33
    }
}

インデントされ、さらにgroupのキーでソートされているこが分かると思います。 コードを見ていきましょう。

とりあえずファイルを開いてみる

#coding:utf-8
import json    #jsonモジュールのインポートです

f = open('data.json', 'r')#ここはテキストファイルなどと同じですね。

jsonとして読み込むload()

jsonData = json.load(f)

csvではreader()を使ったように、jsonではload()を使います。 これにより、jsonのデータをpythonのオブジェクトとして扱うことができるようになります。

dumps()で読みやすく表示する。

print json.dumps(jsonData, sort_keys = True, indent = 4)

引数を見てみましょう。

jsonDataは、jsonオブジェクトですね。

ひとつ飛ばして、indentはインデント。4文字でのインデントです。

さて、sort_keysですが、名前から推測は容易(key値でならべかえです、もちろん) 下記の公式ページの"dumps()"には、sort_keysがありません。

Pythonの公式ページ、jsonのページ

よく探してみると、おなじjsonの中にJSONEncoderというのがあり、その中の昨日としてsort_keysがあるようです。

で、それがどうしてdumpsで??となるわけですが、dumps()の解説にこの文言がありました。

カスタマイズされた JSONDecoder のサブクラスを使うには、 cls キーワード引数に指定します。追加のキーワード引数はこのクラスのコンストラクタに引き渡されます。

ということなのですが、なんとなく釈然としないのです。

dumpするということは、一度オブジェクトとして読み込んだデータを、もう一度jsonとしてエンコードするというのは分かりますが、使い方としてclsを指定している訳でもなく。

とりあえずは、「こういうもの」としておきます。。。。すみません。

load()で読むと、辞書型になる

今日の注意事項ですね。

シンプルにファイルを開いた後で、辞書として読み込みました。 ということで、このjsonDataの中身を辞書を扱うのと同じように、データの取得などができる、ということですね。

では次回以降、読み込んだデータを編集したりしてみましょう。

初めてのPython 第3版

初めてのPython 第3版