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の関連記事


pickle の解説

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら