PythonでJSONを使う方法!(エンコード/デコード)

Python Python

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にエンコードできます。

・dumpメソッド
・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のオブジェクトにデコードできます。

・loadメソッド
・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オブジェクトにデコードする。

コメント

タイトルとURLをコピーしました