
PythonでJSONデータに追加・更新する方法をわかりやすく解説!
この記事では、Pythonを使ってJSONデータに新しいキーと値を追加したり、既存の値を更新したりする方法について、初心者の方にもわかりやすく解説します。json モジュールを使った基本的な操作から、ネストされたデータの扱い方、ファイルへの保存方法まで、実用的な例を交えて詳しく説明します。
PythonでJSONデータを扱うための基礎知識
JSONデータとは
JSON(JavaScript Object Notation)は、データの構造を表すために使われるテキストベースのデータフォーマットです。人間にとっても機械にとっても読み書きが容易であるという特徴があります。JSONは、WebアプリケーションやAPIなどで広く使われており、異なるプログラミング言語間でデータを交換するための標準的なフォーマットとなっています。
JSONデータは、以下の2つの基本構造で構成されます。
- キーと値のペア:文字列をキーとし、任意のデータ型を値として持つことができます。例えば、"name": "John" のように、コロン ":" で区切って表現します。
- 配列:複数の値を順番に並べたものです。例えば、 ["apple", "banana", "orange"] のように、角括弧 "[" と "]" で囲んで表現します。
Pythonの json モジュール
  PythonでJSONデータを扱うには、標準ライブラリの json モジュールを使用します。このモジュールには、JSONデータをPythonのデータ型に変換する関数や、逆にPythonのデータ型をJSONデータに変換する関数が用意されています。
以下は、json モジュールを使ったJSONデータの読み込みと書き込みの基本的な例です。
  import json
  # JSON文字列
  json_string = '{"name": "John", "age": 30, "city": "New York"}'
  # JSON文字列をPythonの辞書に変換
  data = json.loads(json_string)
  # 変換後のデータ型と値の出力
  print(type(data))  # 出力: <class 'dict'>
  print(data)  # 出力: {'name': 'John', 'age': 30, 'city': 'New York'}
  # Pythonの辞書をJSON文字列に変換
  json_string = json.dumps(data)
  # 変換後のJSON文字列の出力
  print(json_string)  # 出力: {"name": "John", "age": 30, "city": "New York"}
  JSONデータに新しいキーと値を追加する
JSONデータをPythonで読み込むと、辞書型(dict)として扱えます。そのため、辞書にキーと値を追加するのと同じ方法で、JSONデータにも新しいキーと値を追加することができます。
  import json
  # JSONデータ
  data = {"name": "John", "age": 30}
  # 新しいキーと値を追加
  data["city"] = "New York"
  # 更新されたJSONデータ
  print(data)  # 出力: {'name': 'John', 'age': 30, 'city': 'New York'}
  JSONデータの既存の値を更新する
JSONデータの既存の値を更新するには、更新したい値を含むキーを指定し、新しい値を代入します。
  import json
  # JSONデータ
  data = {"name": "John", "age": 30, "city": "New York"}
  # 年齢を更新
  data["age"] = 35
  # 更新されたJSONデータ
  print(data)  # 出力: {'name': 'John', 'age': 35, 'city': 'New York'}
  ネストされたJSONデータの扱い方
ネストされたJSONデータとは、キーの値としてさらにJSONデータがネストされている構造のことです。ネストされたデータから特定の値を取得したり、値を追加・更新したりするには、キーを階層的に指定する必要があります。
  import json
  # ネストされたJSONデータ
  data = {
    "person": {
      "name": "John",
      "age": 30,
      "address": {
        "city": "New York",
        "zip": "10001"
      }
    }
  }
  # ネストされた値の取得
  print(data["person"]["address"]["city"])  # 出力: New York
  # ネストされた値の更新
  data["person"]["address"]["zip"] = "10002"
  # ネストされたデータへの新しいキーと値の追加
  data["person"]["address"]["country"] = "USA"
  # 更新されたJSONデータ
  print(data)
  # 出力: {
  #   "person": {
  #     "name": "John",
  #     "age": 30,
  #     "address": {
  #       "city": "New York",
  #       "zip": "10002",
  #       "country": "USA"
  #     }
  #   }
  # }
  JSONデータをファイルに保存する
open() 関数と json.dump() 関数を組み合わせて、JSONデータをファイルに保存することができます。open() 関数のモードを "w" にすると上書き保存、"a" にすると追記保存になります。
  import json
  # JSONデータ
  data = {"name": "John", "age": 30, "city": "New York"}
  # JSONデータをファイルに保存
  with open("data.json", "w") as f:
    json.dump(data, f, indent=4)
  まとめ:PythonでJSONデータを自在に操ろう!
この記事では、Pythonを使ってJSONデータを扱う方法について解説しました。json モジュールを使えば、JSONデータの読み込み、書き込み、追加、更新などが容易に行えます。JSONは、データ交換の標準フォーマットとして広く使われているため、PythonでJSONデータを扱えることは非常に重要です。ぜひ、この記事で学んだことを活かして、JSONデータを自在に操ってください!
関連情報・参考資料
QA
Q1: JSONデータを読み込む際に日本語が文字化けしてしまう場合はどうすればよいですか?
A1: json.load() 関数でJSONデータを読み込む際に、ensure_ascii=False を指定します。これにより、日本語などの非ASCII文字も正しく処理されます。また、ファイルから読み込む場合は、open() 関数の encoding 引数に "utf-8" を指定する必要があります。
Q2: ネストが深く複雑なJSONデータから特定の値を取得するにはどうすればよいですか?
A2: キーを階層的に指定する方法に加えて、ループ処理やリスト内包表記などを活用することで、効率的に値を取得することができます。また、外部ライブラリの "jq" などを使用する方法もあります。
Q3: JSONデータの内容を整形して出力するにはどうすればよいですか?
A3: json.dump() 関数の indent 引数にインデントのサイズを指定することで、整形されたJSONデータを出力できます。例えば、indent=4 とすると、インデントに4つのスペースが挿入されます。
その他の参考記事:jquery json 作成