Pythonにできることは自動化しよう!【第17回 JSON】

こんにちは、unogram管理人のうのちゅ〜です。

【Pythonにできることは自動化しよう!】シリーズとして、Pythonの基礎から順を追って学習し、作業の自動化・効率化を実現する能力を身に着けていきます。Pythonの基礎について学ぶだけで、大規模なコードを書かなくても十分に役に立つプログラムを記述することができるようになります。Pythonは気になるけど、プログラミングには苦手意識がある方も安心してトライしてみてください!

本シリーズでは、以下のようなことができるようになります。

  • ファイルの読み書き・管理
  • Webサイトからファイルをダウンロード
  • エクセルシート操作
  • PDF・ワード文書操作・テキスト抽出
  • 電子メール・SMS送信

うまく活用すれば作業に役立ちそうなワードがたくさん並んでいますね!

なお、本シリーズでは一部以下の書籍を参考にしています。「退屈なことをPythonにやらせる」ようになるためにはうってつけの書籍なので、ぜひ参考にしてみてください。

それでは見ていきましょう!



PythonでJSON形式を扱う

JSONとは

JSONとは、JavaScript Object Notationの略で、「軽量のデータ交換フォーマット」です。

JavaScript言語をベースに作られた形式ですが、CやJava、Perl、そしてPythonなど、様々な言語で扱うことが可能です(JavaScriptの知識も不要です)。人間にとってもコンピュータにとっても扱いやすいのが特徴で、様々なWebサイト・Webアプリケーションなどで使用されており、ぜひとも活用できるようにしておきたいデータ形式です。

参考:JSONの紹介

JSONの書式

JSONがどのような形式で表されるのか、実際にJSONの例を見てみましょう。

JSON形式に整形されたデータは、辞書型のデータ型に似た、keyvalueをもった構造です。ただし、キーはダブルクォート(”)で囲う必要があります。

{
    "key1":"value1",
    "key2":["value2","value3","value4"], 
    "nest1":{
            "objinnest1":{
                "key3":"value5",
                "key4":"value6"
            }
            "objinnest2":{
                "key5":"value7",
                "key6":"value8"
            }
    }
}

JSONが扱えるとできること

JSON形式が扱えると、WebAPIとのデータのやり取りが容易になります。FacebookやTwitterが提供するAPIの形式もJSONになっています。

本シリーズで参考にしている「退屈なことはPythonにやらせよう」では、次のような応用例を紹介しています。詳しい実装内容等についてはぜひ書籍を参照してみてください。

  • 自分のSNSから新規投稿を取得し、別アカウント・別SNSで再投稿
  • 天気予報をwebサイトから取得して表示する
  • Wikipediaなどの複数のwebサイトから特定のテーマのデータを取得して、ひとつのテキストファイルに集約する

jsonモジュール

それではPythonでJSON形式のデータを扱う方法について見ていきましょう。

Pythonでは、jsonモジュールを使用して「JSONデータの読み込み」や、「Pythonの値のJSON形式文字列への変換」を行います。

import json

JSON形式データをPythonの辞書型オブジェクトとして読み込むloads()関数

JSONデータをPythonの値に変換するためには、json.loads()関数を使用します。例を見てみましょう。

json_data = '{\
    "key1":"value1",\
    "key2":["value2","value3",4], \
    "nest1":{\
            "objinnest1":{\
                "key3":"value5",\
                "key4":6\
            },\
            "objinnest2":{\
                "key5":7,\
                "key6":8\
            }\
    }\
}'

python_data = json.loads(json_data)
print(python_data)
# {'key1': 'value1', 'key2': ['value2', 'value3', 4], 'nest1': {'objinnest1': {'key3': 'value5', 'key4': 6}, 'objinnest2': {'key5': 7, 'key6': 8}}}

返り値は辞書型のオブジェクトとなっています。試しにキーを使って値にアクセスしてみます。

nestobj = python_data['nest1']

print(nestobj)
# {'objinnest1': {'key3': 'value5', 'key4': 6}, 'objinnest2': {'key5': 7, 'key6': 8}}

print(nestobj['objinnest1'])
# {'key3': 'value5', 'key4': 6}



Pythonの値をJSON形式に変換するdumps()関数

Pythonの辞書やリスト、文字列、数値といったオブジェクトをJSON形式の文字列に変換するには、json.dumps()関数を使用します。

例を見てみます。さきほどPythonの値に変換したJSONデータに、Pythonの辞書型オブジェクトとしてデータを追加した後、再度JSON形式に変換してみましょう。

pythonobj1 = 10
pythonobj2 = 'thisispythonobj'

python_data['pythonobj1'] = pythonobj1
python_data['pythonobj2'] = pythonobj2

print(python_data)
# {'key1': 'value1', 'key2': ['value2', 'value3', 4], 'nest1': {'objinnest1': {'key3': 'value5', 'key4': 6}, 'objinnest2': {'key5': 7, 'key6': 8}}, 'pythonobj1': 10, 'pythonobj2': 'thisispythonobj'}

print(json.dumps(python_data))
# {"key1": "value1", "key2": ["value2", "value3", 4], "nest1": {"objinnest1": {"key3": "value5", "key4": 6}, "objinnest2": {"key5": 7, "key6": 8}}, "pythonobj1": 10, "pythonobj2": "thisispythonobj"}

違いがわかりにくいですが、Pythonではキーや文字列がシングルクォート(’)で囲われているのに対し、JSON形式ではキーがダブルクォート(”)で囲われています。

まとめ

今回は、【Pythonにできることは自動化しよう!】シリーズ第17回としてPythonによるJSON形式データの扱いについて解説しました。Webアプリケーションとのやり取りを行う上で、JSON形式データの扱いに慣れておくことは欠かせません。Pythonにおける扱い方を知ると同時に、どのようなサービスでJSON形式が使用されているか調べてみることをおすすめします。身近な様々なサービスで使用されていることが分かるかと思います。

さらに追加で詳しく学びたいという方は、下記の参考書などを使った学習にも挑戦してみてください。

おすすめ参考書

冒頭でも紹介しましたが、Pythonによる自動化に向けた学習は、本シリーズでも参考にしている次の書籍がおすすめです。「退屈なことをPythonにやらせる」ようになるためにはうってつけの書籍なので、ぜひ参考にしてみてください。