PythonでJSONを使って、エンコードしたりデコードしたりする方法について書いています。
JSONを使うときにはjsonモジュールをインポートして使うと良いです。
載せているサンプルコードはPythonのバージョン3.11.0で動作を検証しました。
JSONとは?
JSONは「JavaScript Object Notation」の略称で、データをやり取りするための記述方法のひとつです。
Webのバックエンドとフロントエンドで、Web APIとしてデータをやり取りするときに使われたりします。
エンコードとは?
JSONをエンコードするといったときには、特定のデータからJSONのデータに変換するということです。
Pythonではjsonモジュールからdump/dumpsメソッドを使うことで、PythonのオブジェクトからJSONに変換できます。
デコードとは?
JSONをデコードするといったときには、JSONのデータからプログラムで使える内容に変換するということです。
Pythonではjsonモジュールからload/loadsメソッドを使うことで、JSONのデータからPythonのオブジェクトに変換できます。
それぞれのコードを見てみましょう。
JSONをエンコードする
下記のメソッドで、PythonのオブジェクトからJSONにエンコードできます。
・dumpsメソッド
dumpメソッドを使う
jsonモジュールのdumpメソッドを使うと、PythonのオブジェクトをJSONにして、ファイルに出力します。
例えば、下記のように使うと、辞書オブジェクトをJSONにしてファイルに出力します。
import json
user = {'name': '太郎', 'age': 30, 'address': '福岡県福岡市博多区'}
with open('user.json', 'w') as file:
json.dump(user, file)
最初にuser
変数に辞書オブジェクトを代入しました。
次の処理で、open関数を使って、user.json
という名前のファイルを書き込みモードで開きます。
その配下でjsonモジュールのdumpメソッドを呼び出しています。
第1引数に出力したいオブジェクト、第2引数に書き込みモードにしたファイルを渡します。
そうすると、ファイルに対して辞書オブジェクトをJSONにして、書き込んでくれます。
実行すると、下記のようにuser.json
ファイルに出力されました。
{"name": "\u592a\u90ce", "age": 30, "address": "\u798f\u5ca1\u770c\u798f\u5ca1\u5e02\u535a\u591a\u533a"}
dumpsメソッドを使う
jsonモジュールのdumpsメソッドを使うと、PythonのオブジェクトからJSONの文字列に変換してくれます。
例えば、下記のように使います。
import json
user = {'name': '太郎', 'age': 30, 'address': '福岡県福岡市博多区'}
userJson = json.dumps(user)
print(type(userJson))
print(userJson)
最初にuser
変数に辞書オブジェクトを代入しました。
次の処理で、jsonモジュールからdumpsメソッドを呼んで、user
変数を引数として渡しています。
これで、JSON形式の文字列が返ってくるので、userJson
変数で受け取りました。
最後に、この変数の型と、辞書オブジェクトから変換したJSON文字列を出力しています。
プログラムを実行すると、下記のようになりました。
<class 'str'>
{"name": "\u592a\u90ce", "age": 30, "address": "\u798f\u5ca1\u770c\u798f\u5ca1\u5e02\u535a\u591a\u533a"}
文字列の型になっていて、JSONにエンコードされたことが確認できました。
JSONをデコードする
下記のメソッドで、JSONからPythonのオブジェクトにデコードできます。
・loadsメソッド
loadメソッドを使う
jsonモジュールのloadメソッドを使うと、ファイルを読み込んで、ファイルに書いているJSONからPythonのオブジェクトにすることができます。
例えば、下記のように使うと、JSONから辞書オブジェクトにデコードします。
import json
user = None
with open('user.json') as file:
user = json.load(file)
print(type(user)) # <class 'dict'>
print(user['name']) # 太郎
print(user['age']) # 30
print(user['address']) # 福岡県福岡市博多区
最初にuser
変数を用意しています。
次の処理で、user.json
ファイルを開きました。
ファイルを開いている処理の配下で、jsonモジュールのloadメソッドを使っています。
引数で渡しているのが読み込んだファイルオブジェクトです。
ファイルに書いているJSONをデコードして、user
変数に代入しました。
最後にuser
変数の内容を出力しました。
実際にプログラムを実行して、JSONをloadで読み込むときに、下記のファイルを使いました。
dumpメソッドで出力したuser.json
ファイルです。
{"name": "\u592a\u90ce", "age": 30, "address": "\u798f\u5ca1\u770c\u798f\u5ca1\u5e02\u535a\u591a\u533a"}
実行すると、下記のように出力されました。
<class 'dict'>
太郎
30
福岡県福岡市博多区
JSONの内容がPythonの辞書オブジェクトになったことが確認できました。
それぞれのキーにアクセスすると、値が出力できています。
loadsメソッドを使う
jsonモジュールのloadsメソッドを使うと、文字列のJSONからPythonのオブジェクトにデコードできます。
例えば、下記のように使います。
import json
userJson = '{"name":"太郎", "age": "30", "address": "福岡県福岡市博多区"}'
user = json.loads(userJson)
print(type(user)) # <class 'dict'>
print(user['name']) # 太郎
print(user['age']) # 30
print(user['address']) # 福岡県福岡市博多区
最初にuserJson
変数に対して、文字列でJSONを代入しました。
その次の処理で、jsonモジュールのloadsメソッドを使っています。
引数として渡しているのは、userJson
変数(文字列のJSON)です。
返り値をuser
変数に受け取って、最後に出力しています。
プログラムを実行して出力を確認すると、下記のようになりました。
<class 'dict'>
太郎
30
福岡県福岡市博多区
文字列のJSONから、Pythonの辞書オブジェクトになったことが確認できました。
それぞれのキーにアクセスして、値が出力できました。
JSONを使う方法のまとめ
今回はPythonでJSONを使う方法について書きました。
JSONを使うときには、jsonモジュールを使うことでエンコード・デコードすることができました。
記事の内容をまとめると、下記のようになります。
メソッド | 説明 |
---|---|
dump | Pythonオブジェクトを、JSONにエンコードしてファイルに出力する。 |
dumps | Pythonオブジェクトを、JSONにエンコードして文字列として取得する。 |
load | JSONが書いているファイルから、Pythonオブジェクトにデコードする。 |
loads | 文字列のJSONから、Pythonオブジェクトにデコードする。 |
コメント