おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

Python初級者のお勉強ノート(17)jsonモジュール

Pythonを学ぶ上で、データのやり取りや保存方法の基本としてJSON形式を理解することは重要です。 この記事では、Python標準モジュールのjsonを取り上げ、その基本と実用例を解説します。

JSONとは?

JSONJavaScript Object Notation)は、データを簡潔かつ人間が読める形式で表現する軽量なデータフォーマットです。
JSONは、もともとJavaScriptで利用されていましたが、現在ではプログラミング言語を問わず、広く使われています。
特に、APIを介したデータ交換や設定ファイル、データの保存形式として重要な役割を果たしています。

具体的には、次のような特徴があります: - テキスト形式で軽量。 - 構造化されたデータ(リストや辞書のようなもの)を表現可能。 - 人間にも読みやすく、機械が解析しやすい。

JSONの構造と形式

JSONは、次のような基本構造を持ちます:

オブジェクト(Object)

  • { }で囲まれたキーと値のペアの集合。
  • キーは文字列、値は文字列・数値・オブジェクトなど。
{
  "name": "Alice",
  "age": 25,
  "isStudent": false
}

配列(Array)

  • [ ]で囲まれた値のリスト。
  • 値は文字列・数値・オブジェクトなどを含められる。
{
  "colors": ["red", "green", "blue"]
}

JSONで使えるデータ型

  • 文字列: "hello"
  • 数値: 42, 3.14
  • 真偽値: true, false
  • null: null
  • オブジェクト: {...}
  • 配列: [...]

JSONが使われる場面

コンピュータ内部では、Pythonのリスト、辞書、数値などのデータ構造を使い、高速に処理を行うことができます。 これらは文字列ではありませんので、コンピュータ外部にそのまま持ち出せません。 そこで、それらを文字列に変換して、サーバと通信したり、ディスプレイに表示したりします。 この文字列変換には、いくつかの方法が考えられますが、最も簡単なのがJSONです。

JSONは多くの場面で使われています。その例として以下が挙げられます:

  • Web APIとのデータ交換
    クライアントとサーバー間のデータ送受信に使用されます。例えば、天気予報APIや為替レートAPIは、データをJSON形式で提供します。

  • 設定ファイル
    アプリケーションの設定情報を保存する形式として利用されます。例えば、VSCodeの設定ファイル(settings.json)はJSON形式です。

  • データの永続化
    小規模なデータベース代わりに、JSON形式でデータを保存することもあります。

PythonJSONを扱う:jsonモジュール

Pythonの標準モジュールであるjsonを使うと、JSONデータをPythonのデータ型(辞書やリストなど)と相互に変換したり、JSONファイルを操作できます。

jsonモジュールの主な機能

jsonは単純な言い方をすれば、オブジェクトと配列からなるテキストです。 それは、自然にPythonの辞書とリストに対応させることができます。 その他の要素も次の表のように対応させることができます。

JSONの型 Pythonの型
オブジェクト 辞書 (dict)
配列 リスト (list)
文字列 (string) 文字列 (str)
数値 (number) 整数 (int) または浮動小数点数 (float)
真偽値 (true/false) True / False
null None

この表に従って次のような双方向の変換がjsonモジュールではサポートされています。

  1. JSON文字列とPythonデータ型の変換

    • JSON文字列からPythonの辞書やリストに変換。
    • Pythonの辞書やリストをJSON文字列に変換。
  2. JSONファイルの読み書き

    • JSON形式のファイルを読み込んでPythonのデータ型に変換。
    • Pythonのデータ型をJSON形式でファイルに保存。

JSONモジュールでよく使うメソッド

1. json.dumps(obj, **kwargs)

PythonオブジェクトをJSON文字列に変換します。

例:
import json

data = {"name": "Alice", "age": 25}
s = json.dumps(data)
print(s)  # {"name": "Alice", "age": 25}
主な引数:
  • indent: インデントを指定し、読みやすく整形。
  • sort_keys: キーをアルファベット順にソート。
整形した出力:
s = json.dumps(data, indent=4, sort_keys=True)
print(s)

次のように整形されて表示されます。

{
    "age": 25,
    "name": "Alice"
}

2. json.loads(s)

JSON文字列をPythonの辞書やリストに変換します。

例:
s = '{"name": "Alice", "age": 25}'
data = json.loads(s)
print(data["name"])  # Alice

3. json.dump(obj, fp, **kwargs)

PythonオブジェクトをJSON形式でファイルに保存します。

例:
data = {"name": "Alice", "age": 25}

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

4. json.load(fp)

JSON形式のファイルをPythonのデータ型に変換して読み込みます。

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

実用例:JSON形式の設定ファイルを読み書きする

Pythonプログラムで設定を管理する際、JSON形式のファイルを利用すると便利です。

サンプル設定ファイル(config.json

{
  "theme": "dark",
  "fontSize": 14,
  "autoSave": true
}

設定を読み込むプログラム

import json

# 設定ファイルを読み込む
with open('config.json', 'r') as f:
    config = json.load(f)

# 設定を表示
print(f"テーマ: {config['theme']}")
print(f"フォントサイズ: {config['fontSize']}")
print(f"自動保存: {'有効' if config['autoSave'] else '無効'}")

設定を変更して保存するプログラム

# 設定を変更
config['theme'] = 'light'

# 設定ファイルを更新
with open('config.json', 'w') as f:
    json.dump(config, f, indent=4)

まとめ

  1. JSONとは

    • 軽量で人間が読みやすいデータ形式。主にデータ交換や保存に使用される。
  2. Pythonjsonモジュール

    • JSON文字列の変換やファイル操作を簡単に行うための標準モジュール。
  3. よく使うメソッド

    • json.dumps, json.loads: JSON文字列との変換。
    • json.dump, json.load: JSONファイルとの変換。
  4. 実用例

    • 設定ファイルの読み書きやデータの永続化。