PythonでJSON形式のファイルや文字列を読み込む方法

PythonでJSON形式のデータの読み込みは、Pythonの標準ライブラリ「json」を使って行えます。

この記事では、Pythonの標準ライブラリ「json」を使ってJSON形式のデータを読み込む方法を解説します。

この記事を読めば、JSON形式のデータの基本的な読み込みから、整形して出力する方法など応用的な使い方までわかります。

PythonでJSON形式のデータを扱い方を詳しく知りたい方は、ぜひ参考にしてください。

目次

標準ライブラリ「json」の読み込み

PythonでJSON形式のファイルを読む込むために利用する標準ライブラリはjsonです。

次のように記述して、標準ライブラリ「json」を読み込みます。

import json

これでPythonでJSON形式のデータを読む込む準備ができました。

JSONを読む込む方法

JSON形式のデータを読み込む際には、主に次の2つの場合があります。

  • JSON形式のファイルの読み込み
  • APIなどから取得したJSON形式の文字列の読み込み

これら2つの方法は、使用する関数が異なりますので注意が必要です。

読み込み対象読み込みに利用する関数
ファイルload()
文字列loads()

JSON形式のファイルの読み込み

JSON形式のファイルを読み込むためには、load()関数を使用します。

load()関数を使用する前にopen()関数を利用して、ファイルの読み込みを行います。

JSONファイルを読み込みするコード例は次のようになります。

import json

with open('example.json', 'r') as f:
  data = json.load(f)

JSON形式の文字列の読み込み

JSON形式の文字列を読み込むためには、loads()関数を使用します。

もしAPIを利用して、JSON形式の文字列を取得する場合は、requestsライブラリをインポートして、get()関数を利用します。

get()関数を使用して得た返り値はResponseオブジェクトです。

読み込む際には、res.textのようにプロパティにアクセスして文字列型にするのを忘れないようにしましょう。

JSON形式の文字列を読み込みするコード例は次のようになります。

import json
import requests

url = "http://example.com/api/search?limit=1"
res = requests.get(url)
data = json.loads(res.text) # 文字化けする場合は「res.text.encode('xxx')」で対応

読み込んだJSONを整形して出力する方法

読み込んだJSONデータ整形して、出力したい場合の方法を解説します。

JSONを出力する方法は、主に2つの方法があります。

出力方法出力に利用する関数
ファイルdump()
文字列dumps()

整形して出力する際には、関数に引数を指定する必要があります。以下で詳しく解説していきます。

ファイルに整形して書き込みする

ファイルに整形して出力するには、dump()関数を利用します。

dump()関数は、第一引数に出力したい内容、第二引数に出力先のファイルを指定します。そして、indentに数値を指定することにより、整形されて出力されます。

ファイルから読み込んだJSONデータを整形して出力する方法は、次のようになります。

import json

data = None
with open('input.json', 'r') as f:
  data = json.load(f)

with open('output.json', 'w') as f:
    json.dump(data, f, indent=2)

文字列として整形して出力する

文字列として出力するには、dumps()関数を利用します。dumps()関数を利用する際には、別途出力する記述が必要となります。以下は、print()関数で出力する例です。

dumps()関数は、第一引数に出力したい内容を指定します。そして、indentに数値を指定することにより、整形されて出力されます。

読み込んだ文字列のJSONデータを整形して出力する方法は、次のようになります。

import json
import requests

url = "http://example.com/api/search?limit=1"
res = requests.get(url)
data = json.loads(res.text)

print(data.dumps(data, indent=2)

読み込んだJSONデータの型

load()もしくはloads()関数で読み込んだJSONのデータ型は、変換表に基づいて決まります。

JSONPython
objectdict
arraylist
stringstr
number (int)int
number (real)浮動小数点数
trueTrue
falseFalse
nullNone
Pythonドキュメント「json — JSON エンコーダーとデコーダー」より

読み込んだ後の型は、type()関数を使って確認ができます。

url = "https://api.example.com/api/search?id=xxx"
res = requests.get(url)
data = json.loads(res.text)
print(type(data))
# <class 'dict'>

読み込んだJSONデータは、基本的にobject形式だと思います。object形式のJSONを読み込んだ後は、dict型になっている点に注意しましょう。

目次