はじめに
Python組み込みのjsonモジュールの「load関数」を使って、JSONファイルを読み込む方法を解説します。load関数を使うと、JSONファイルを辞書に変換することができます。
Python組み込みなのでインストール不要。使い方も簡単なので、サクッとJSONを扱いたい方はぜひご覧ください。
環境
この記事は以下の環境で作成しています。
環境 | バージョンなど | 備考 |
Python | 3.9.6 | |
OS | Wiindows10 | Win10でもOKです。 |
loadとloadsの違い
JSONの読み込みには「load」「loads」の2つの関数があります。読み込み対象が「ファイル」か「文字列」かで2つの関数を使い分けます。
今回はJSON「ファイル」からの読み取りなので「load関数」を使用します。
関数名 | 読み込み対象 |
load | JSON「ファイル」 |
loads | JSON「文字列」 |
「読み取り」となると「Parse」を思い浮かべますが、jsonモジュールにParse関数はありません。
ファイルから読み取りに使う「load」関数の使い方が知りたい方は、こちらのページをごらんください。
コードの概要
コードの概要は以下の通りです。
- Openで「JSONファイル」を開く
- load関数で「辞書型」として取得する
- 辞書型データの書き換え・再表示
読み込むJSONファイル
以下のJSONファイルを読み込みます。
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [
"User",
"Admin"
]
}
後述するコードをそのまま実行する場合は、上記のJSONファイル(test.json)をコードと同じフォルダに保存してください。
実行結果
後述の「JSONファイルを読み込むコード」の実行結果です。JSONファイルを辞書型のデータに取り込んで表示しています。
最終行のメールアドレスは、JSONファイルの「Email」の部分を書き換えて、再表示しています。
james@example.com
True
2013-01-20T00:00:00Z
User
Admin
taro@example.com
全体コード
「JSONを読み込むコード」の全体です。ポイント部分は後述の「コードのポイント」で詳しく解説します。
import json
# JSONファイルを読み込みます
with open("test.json", "r") as file:
dict = json.load(file)
# 読み込んだ内容にアクセス(表示)します
print( dict["Email"])
print( dict["Active"])
print( dict["CreatedDate"])
print( dict["Roles"][0])
print( dict["Roles"])
# 要素を指定して代入で、値の書き換えができます
dict["Email"] = "taro@example.com"
print( dict["Email"] )
コードのポイント
JSONファイルを開く
open関数でJSONファイルを読み込みます。
「with」の書き方はjsonモジュールに必須ではありません。スコープ(インデントされたブロック)から抜けた際に、自動的にファイルのCloseを行ってくれる便利なコードです。
「”file”という変数に、”r”(読み込みモード)で、”test.json”を開いてね」 という記述です。
with open("test.json", "r") as file:
load関数でJSONから辞書に
load関数にファイルオブジェクト(変数)を渡すと、JSONファイルを辞書型のオブジェクトとして取得できます(デシリアライズ操作)。
dict = json.load(file)
load関数は「ファイル形式」のJSONを使いますが、「文字列形式」のJSONを渡したい場合は、loads関数を使います。
dict = json.loads(string_json)
格納データにアクセスする
辞書の要素名には「”Email”」など、JSONの変数名がそのまま使われます。そのため、辞書の要素名に、JSONの変数名を指定してアクセスします。
# 読み込んだ内容にアクセス(表示)します
print( dict["Email"])
print( dict["Active"])
print( dict["CreatedDate"])
print( dict["Roles"][0])
print( dict["Roles"])
# 要素を指定して代入で、値の書き換えができます
dict["Email"] = "taro@example.com"
print( dict["Email"] )
loadのエラー対処方法
JSONファイルの内容によっては、load関数で以下のエラーが発生することがあります。その際はJSONファイルに「シングルクォート」や「カンマ忘れ」がないか確認してみてください。
シングルクォートによるエラー
JSONファイル内でシングルクォート(”)を使うと、JSONDecodeErrorが発生します。シングルクォートを使用している場合は、ダブルクォート(“”)に書き換えてください。
シングルクォートで囲んだ例
{
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
]
}
エラーの表示例
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 5 (char 6)
カンマ忘れによるエラー
JSONファイル内でカンマを忘れた場合も JSONDecodeError が発生します。エラーの行番号などを参考に、カンマ忘れがないか確認してください。
カンマを忘れた場合の例
カンマを忘れた場合の例です。先頭のEmailの行の最後にカンマがありません。
{
"Email": "james@example.com"
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [
"User",
"Admin"
]
}
エラーの表示例
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 3 column 5 (char 39)
まとめ
Python組み込みの「json」モジュールを使って、JSONファイルを読み込む方法を解説しました。参考になればうれしいです。
お知らせ
3月号の『日経ソフトウェア』はPythonの特集。穴埋め式クイズで学ぶPython入門や、PythonでExcelを動かす方法などが特集されています。
jsonモジュールの他の使い方
このブログでは、jsonモジュールの以下の使い方についても解説しています。興味のある方は以下の記事も是非ご覧ください。
JSONファイルの読み込み
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。