PythonでJSONの扱い方を徹底解説|JSONデータの読み込み・書き込み・変換方法

メタディスクリプション:
PythonでJSONを扱う方法を初心者向けに解説。jsonモジュールを使ったJSONの読み込み・書き込み、JSONと辞書の変換、APIから取得したJSONデータの処理方法まで、サンプルコード付きで紹介します。
JSONとPythonの使い方を徹底解説
PythonでWeb APIを利用したり、設定ファイルを読み込んだりするときに、JSONを扱う機会は非常に多くあります。
Pythonには標準ライブラリとしてjsonモジュールが用意されているため、追加のライブラリをインストールしなくてもJSONを簡単に扱えます。
この記事では、Python初心者に向けて以下の内容を解説します。
-
JSONとは何か
-
PythonでJSONを扱う方法
-
JSONとPythonのデータ型の対応
-
JSON文字列をPythonの辞書に変換する方法
-
Pythonの辞書をJSONに変換する方法
-
JSONファイルの読み込み・書き込み
-
APIから取得したJSONの扱い方
-
JSONを扱うときの注意点
JSONとは?
JSONは、JavaScript Object Notationの略称です。
人間にも読みやすく、プログラムからも扱いやすいデータ形式として、Web APIや設定ファイルなどで広く利用されています。
例えば、次のようなデータがJSONです。
{
"name": "Taro",
"age": 30,
"city": "Tokyo"
}
name、age、cityというキーに対して、それぞれ値が設定されています。
JSONはJavaScript由来の形式ですが、Python、Ruby、Java、PHPなど、さまざまなプログラミング言語で利用できます。
PythonでJSONを扱うには「json」モジュールを使う
Pythonでは、標準ライブラリのjsonモジュールを利用します。
import json
標準ライブラリなので、通常はpip installなどによるインストールは必要ありません。
Pythonのjsonモジュールでは、主に以下の処理を行います。
| 処理 | 関数 |
|---|---|
| JSON文字列 → Pythonオブジェクト | json.loads() |
| Pythonオブジェクト → JSON文字列 | json.dumps() |
| JSONファイル → Pythonオブジェクト | json.load() |
| Pythonオブジェクト → JSONファイル | json.dump() |
特に重要なのが、loadsとdumps、loadとdumpの違いです。
JSONとPythonのデータ型の対応
JSONとPythonでは、データ型が一部対応しています。
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number | int / float |
| true | True |
| false | False |
| null | None |
例えば、JSONの
{
"name": "Taro",
"age": 30,
"student": true,
"address": null
}
は、Pythonでは次のような辞書として扱えます。
{
"name": "Taro",
"age": 30,
"student": True,
"address": None
}
ここで注意したいのが、JSONではtrue、false、nullと小文字で記述するのに対し、PythonではTrue、False、Noneと記述する点です。
PythonでJSON文字列を読み込む方法
JSON形式の文字列をPythonの辞書やリストに変換するには、json.loads()を使用します。
import json
data = '{"name": "Taro", "age": 30}'
result = json.loads(data)
print(result)
実行結果:
{'name': 'Taro', 'age': 30}
resultはPythonの辞書になっています。
print(type(result))
実行結果:
<class 'dict'>
詳しくは「Python json.loads()とは?JSON文字列を辞書に変換する方法」で解説しています。
JSONから特定の値を取得する
辞書に変換したJSONは、通常のPython辞書と同じように扱えます。
import json
data = '{"name": "Taro", "age": 30}'
result = json.loads(data)
print(result["name"])
print(result["age"])
実行結果:
Taro
30
JSONをPythonで扱う場合、JSON → dict → キーを指定して値を取得という流れが基本になります。
Pythonの辞書をJSONに変換する
逆に、Pythonの辞書をJSON形式の文字列に変換する場合はjson.dumps()を使用します。
import json
data = {
"name": "Taro",
"age": 30
}
result = json.dumps(data)
print(result)
実行結果:
{"name": "Taro", "age": 30}
つまり、
Python dict
↓
json.dumps()
↓
JSON文字列
という変換ができます。
詳しくは「Python json.dumps()とは?辞書をJSON文字列に変換する方法」で解説しています。
JSONを見やすく整形する
json.dumps()にindentを指定すると、JSONをインデント付きで出力できます。
import json
data = {
"name": "Taro",
"age": 30,
"skills": [
"Python",
"JavaScript"
]
}
result = json.dumps(data, indent=4)
print(result)
出力:
{
"name": "Taro",
"age": 30,
"skills": [
"Python",
"JavaScript"
]
}
デバッグするときなどに便利です。
詳しくは「Python json.dumps()とは?辞書をJSON文字列に変換する方法」で解説しています。
日本語を含むJSONを扱う
Pythonで日本語を含むデータをJSONに変換すると、デフォルトでは日本語がUnicodeエスケープされる場合があります。
例えば、
import json
data = {
"name": "太郎"
}
print(json.dumps(data))
とすると、
{"name": "\u592a\u90ce"}
のように表示されます。
日本語をそのまま表示したい場合は、ensure_ascii=Falseを指定します。
import json
data = {
"name": "太郎"
}
result = json.dumps(data, ensure_ascii=False)
print(result)
結果:
{"name": "太郎"}
日本語を扱うJSONでは、ensure_ascii=Falseは覚えておくと便利です。
詳しくは「Python json.dumps()とは?辞書をJSON文字列に変換する方法」で解説しています。
JSONファイルをPythonで読み込む
JSONファイルを読み込む場合は、json.load()を使います。
例えば、data.jsonというファイルがあるとします。
{
"name": "Taro",
"age": 30
}
Pythonから読み込むには、次のようにします。
import json
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data)
実行結果:
{'name': 'Taro', 'age': 30}
ファイルを扱う場合は、
json.load()
を使うことがポイントです。
詳しくは「Python json.load()とは?JSONファイルを読み込む方法」で解説しています。
PythonのデータをJSONファイルに保存する
Pythonの辞書をJSONファイルとして保存する場合は、json.dump()を使います。
import json
data = {
"name": "Taro",
"age": 30
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
これでdata.jsonが作成されます。
内容は次のようになります。
{
"name": "Taro",
"age": 30
}
詳しくは「Python json.dump()とは?JSONファイルに書き込む方法」で解説しています。
loads()とload()の違い
初心者が特に混乱しやすいのが、loads()とload()の違いです。
json.loads()
JSON文字列をPythonオブジェクトに変換します。
json.loads(json_string)
json.load()
JSONファイルをPythonオブジェクトに変換します。
json.load(file)
つまり、
文字列 → loads
ファイル → load
と覚えると分かりやすいでしょう。
詳しくは「Python json.loads()とは?JSON文字列を辞書に変換する方法」で解説しています。
dumps()とdump()の違い
こちらも同じ考え方です。
json.dumps()
PythonオブジェクトをJSON文字列に変換します。
json.dumps(data)
json.dump()
PythonオブジェクトをJSONファイルに書き込みます。
json.dump(data, file)
まとめると次のようになります。
| 関数 | 入力 | 出力 |
|---|---|---|
loads() |
JSON文字列 | Pythonオブジェクト |
load() |
JSONファイル | Pythonオブジェクト |
dumps() |
Pythonオブジェクト | JSON文字列 |
dump() |
Pythonオブジェクト | JSONファイル |
詳しくは「Python json.dumps()とは?辞書をJSON文字列に変換する方法」で解説しています。
詳しくは「Python pickleとは?オブジェクトを保存・復元する方法を解説」で解説しています。
PythonでJSON APIを扱う
JSONはWeb APIで頻繁に利用されます。
例えば、APIからJSON形式のデータを取得した場合、Pythonでは辞書やリストとして処理できます。
requestsなどのHTTPクライアントを利用する場合、例えば次のように書けます。
import requests
response = requests.get("https://example.com/api/data")
data = response.json()
print(data)
response.json()によって、レスポンスのJSONデータをPythonのオブジェクトとして取得できます。
例えばAPIが、
{
"name": "Taro",
"age": 30
}
を返した場合、
print(data["name"])
で、
Taro
を取得できます。
JSONのネストしたデータをPythonで取得する
JSONでは、オブジェクトの中にオブジェクトや配列を含めることができます。
例えば、
{
"user": {
"name": "Taro",
"age": 30
}
}
をPythonで扱うと、
import json
data = '''
{
"user": {
"name": "Taro",
"age": 30
}
}
'''
result = json.loads(data)
print(result["user"]["name"])
実行結果:
Taro
のように、複数のキーを指定して値を取得できます。
JSONの配列をPythonで扱う
JSONの配列は、Pythonではlistとして扱われます。
例えば、
{
"languages": [
"Python",
"JavaScript",
"Ruby"
]
}
を読み込むと、
import json
data = '''
{
"languages": [
"Python",
"JavaScript",
"Ruby"
]
}
'''
result = json.loads(data)
print(result["languages"])
結果:
['Python', 'JavaScript', 'Ruby']
リストなので、通常のPythonと同じようにインデックスを指定できます。
print(result["languages"][0])
結果:
Python
JSONをPythonで扱うときのエラー
JSONの形式が正しくない場合、json.loads()などでエラーが発生します。
例えば、
import json
data = '{"name": "Taro", "age": 30'
result = json.loads(data)
この場合、JSONの}が不足しているため、JSONDecodeErrorが発生します。
エラー処理を行う場合は、次のようにできます。
import json
data = '{"name": "Taro", "age": 30'
try:
result = json.loads(data)
except json.JSONDecodeError:
print("JSONの形式が正しくありません")
外部APIから受け取ったデータなど、JSONの内容が保証されないケースでは、エラー処理を検討しましょう。
詳しくは「Python json.loads()とは?JSON文字列を辞書に変換する方法」で解説しています。
JSONとPython辞書は同じものではない
JSONとPythonの辞書は見た目が似ていますが、同じものではありません。
例えばPythonでは、
data = {
"name": "Taro",
"age": 30
}
という辞書を作れます。
一方、JSONはデータ交換用のフォーマットです。
{
"name": "Taro",
"age": 30
}
PythonでJSONを読み込むと、JSONオブジェクトがPythonのdictに変換されます。
つまり、
JSON
↓ json.loads()
Python dict
という関係です。
逆に、
Python dict
↓ json.dumps()
JSON
という変換もできます。
PythonでJSONを扱うときのポイント
PythonでJSONを扱う場合は、次のポイントを押さえておきましょう。
1. jsonモジュールを利用する
import json
Python標準ライブラリなので、基本的に追加インストールは必要ありません。
2. 文字列とファイルで関数が違う
文字列
loads / dumps
ファイル
load / dump
と覚えると便利です。
3. JSONとPythonのデータ型の違いに注意する
例えば、
JSON Python
true → True
false → False
null → None
となります。
4. 日本語にはensure_ascii=False
json.dumps(data, ensure_ascii=False)
とすると、日本語をそのままJSONに出力できます。
JSONとPythonを組み合わせるメリット
PythonとJSONを組み合わせることで、さまざまなシステムを構築できます。
特に以下のような用途で活用されています。
-
Web APIとのデータ通信
-
設定ファイルの管理
-
データの保存
-
データ分析
-
Webアプリケーション
-
機械学習システム
-
AIアプリケーション
-
外部サービスとの連携
例えば、Pythonで取得したデータをJSONにしてAPIから返す、といった処理はWeb開発でよく利用されます。
JSONとPythonの関係を理解しよう
PythonでJSONを扱う場合、まず覚えておきたいのは以下の4つの関数です。
json.loads()
json.load()
json.dumps()
json.dump()
役割を整理すると、
JSON文字列
↓
json.loads()
↓
Pythonのdict/list
Pythonのdict/list
↓
json.dumps()
↓
JSON文字列
ファイルの場合は、
JSONファイル
↓
json.load()
↓
Pythonのdict/list
Pythonのdict/list
↓
json.dump()
↓
JSONファイル
となります。
この基本を理解しておけば、API連携やJSONファイルの処理など、PythonでJSONを扱う多くの場面に対応できます。
まとめ
今回は、PythonでJSONを扱う方法について解説しました。
重要なポイントをまとめると、次のとおりです。
-
JSONはデータ交換に広く利用される形式
-
Pythonでは標準ライブラリの
jsonモジュールを利用できる -
JSON文字列をPythonに変換するなら
json.loads() -
JSONファイルを読み込むなら
json.load() -
PythonのデータをJSON文字列にするなら
json.dumps() -
PythonのデータをJSONファイルに保存するなら
json.dump() -
日本語をそのまま出力するなら
ensure_ascii=False -
JSONのobjectはPythonの
dict、arrayはlistに対応する
特に、「文字列ならloads/dumps、ファイルならload/dump」と覚えておくと、JSONの扱い方が分かりやすくなります。
Pythonを使ったWeb API開発やAI・データ分析を学ぶ場合にも、JSONの知識は非常に重要です。
JSONの関連記事
- Python json.dumps()とは?辞書をJSON文字列に変換する方法
- Python json.loads()とは?JSON文字列を辞書に変換する方法
- Python json.dump()とは?JSONファイルに書き込む方法
- Python json.load()とは?JSONファイルを読み込む方法
- JSONとは?初心者向けに意味・書き方・使い方をわかりやすく解説
- Python json関数一覧|JSONの読み込み・書き込み・変換方法をまとめて解説
- Python requestsとは?使い方を初心者向けに解説|HTTP通信・GET・POST・JSON取得
- Python xml.etree.ElementTreeとは?XMLを読み書きする方法




