はじめに
Python組み込みの「json」モジュールを使って、「JSONファイルを読み込む方法」を解説します。インストール不要、たった2行でできるので、「JSONファイルを扱いたいけどpandasを覚えるのはちょっと手間だな…」という方は是非ご覧ください。
環境
この記事は以下の環境で作成しています。
Python | 3.9.6 |
OS | Windows10 |
コードの概要
コードの概要は以下の通りです。JSONファイルを読み取り・内容の表示・書き換えを行います。
- JSONファイルの読み取り
- 読み取った内容を表示
- 内容の書き換え・再表示
読み込むJSONファイル
読み込むJSONファイルは、以下の通りです。
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [
"User",
"Admin"
]
}
実行結果
後述の「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)
JSONファイルの読み込みは、上で解説した2行で完了です。
JSONファイルの内容によっては、以下のエラーが発生します。エラーが出た場合は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)
格納データにアクセスする
データを格納した辞書には、「"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"] )
まとめ
Python組み込みの「json」モジュールを使って、JSONファイルを読み込む方法を解説しました。参考になればうれしいです。
最新技術に追いつけない...という方へ
Pythonやソフトウェアのトレンドについて「何を見ればいいかわからない」「早すぎて追いつけない!」という方は、今の時代でも雑誌が便利です。
最近は目にする機会が減っているかもしれませんが、正確できちんと編集された情報が「手軽」に読めるのは、今も昔も雑誌しかありません。電子化もされているので保管や廃棄に困ることもなくなりました。
Pythonも毎回特集されていて、機械学習やエディタなどの情報も一石二鳥でキャッチでます。若手の会話に「なにそれ…」となる前に、手軽に最新情報を仕入れましょう。
最新号以外はKindleUnlimitedに対応しています。今なら2か月分が980円です。
jsonモジュールの他の使い方
このブログでは、jsonモジュールの以下の使い方についても解説しています。興味のある方は以下の記事も是非ご覧ください。
JSONファイルの読み込み
応援・要望お待ちしてます
ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。
ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。