PythonでJSONデータをExcelのテーブル形式に変換する



データ分析やレポート作成で、JSON形式のデータに頭を悩ませた経験はないでしょうか。
Web APIから取得したデータやシステムログなど、JSONは現代のデータ交換において欠かせないフォーマットですが、そのままではExcelでの集計や分析が難しいと感じる方もいるでしょう。

JSON形式のデータをExcelのテーブル形式に変換する方法はいくつかありますが、手間のかかる作業はPythonプログラムで自動化することができます。

今回は、Pythonの強力なライブラリ Pandas を使って、JSONデータを瞬時にExcelのきれいなテーブル形式に変換する方法についてご紹介します。

まだ、Pythonの環境や開発環境が整っていない方は、以下の記事で詳しくご紹介していますので参考にしてください。
Pythonは無料でパソコンにインストールできます。もちろん、今回利用するライブラリも無料でインストールできます。


JSONデータをExcelのテーブル形式に変換するにあたり、今回は、Pandasというライブラリを使って、JSONデータをExcelのテーブル形式に変換する方法について解説します。
PandasはPythonでデータ分析を行う際に非常に便利なライブラリです。表形式のデータを扱うのが得意で、Excelファイルの読み書きも簡単にできます。

初めてライブラリをインストールされる方は、ライブラリのインストール方法を以下の記事でご紹介していますので参考にしてください。


Pandasのライブラリをまだインストールされていない方は、ターミナルやコマンドプロンプトで、下記のコマンドを実行してpandasライブラリをインストールしておきましょう。

pip install pandas



Pythonの開発環境と利用するライブラリの準備ができましたら、早速、JSONデータをExcelのテーブル形式への変換を、この後ご紹介するサンプルを参考に実装してみましょう。

JSONデータをExcelに変換する


ここでは、シンプルなJSONファイルをExcelのテーブル形式に変換するPythonプログラムについて詳しく見ていきます。

作成するPythonプログラムは、特定のJSONファイルの内容を読み込み、PandasのDataFrameという形式に変換し、最終的にExcelファイルとして出力します。

まず、変換対象となるJSONファイルを見てみましょう。
sample.jsonというファイル名で、以下のようなデータが格納されています。

sample.json

[
  {
    "id": 1,
    "name": "Alice",
    "age": 30,
    "city": "New York"
  },
  {
    "id": 2,
    "name": "Bob",
    "age": 24,
    "city": "Los Angeles"
  },
  {
    "id": 3,
    "name": "Charlie",
    "age": 35,
    "city": "Chicago"
  }
]


これは、複数のオブジェクト(辞書)がリストとして格納されている形式です。各オブジェクトは、id、name、age、cityといった共通のキー(項目)を持っています。
この形式は、Excelのようなテーブル形式に変換するのに非常に適しています。

次に、JSONファイルの内容を読み込んでテーブル形式に変換するPythonプログラムを見てみましょう。
以下、実際に変換を行うPythonプログラムになります。

json_table.py

import pandas as pd
import json

def json_to_excel(json_filepath, excel_filepath, sheet_name='Sheet1'):
    """
    json_to_excel ・・・ JSONファイルを読み込み、Excelのテーブル形式に変換して保存します。
    Args:
        json_filepath (str): 入力JSONファイルのパス。
        excel_filepath (str): 出力Excelファイルのパス。
        sheet_name (str): Excelシートの名前(デフォルトは'Sheet1')。
    """
    try:
        # JSONファイルを読み込む
        with open(json_filepath, 'r', encoding='utf-8') as f:
            json_data = json.load(f)

        # JSONデータをpandas DataFrameに変換する
        # JSONデータがリストの辞書形式である場合、pandasは自動的にテーブル形式に解釈します。
        df = pd.DataFrame(json_data)

        # DataFrameをExcelファイルに書き出す
        # index=Falseとすることで、ExcelにDataFrameのインデックス(左端の連番)が出力されないようにします。
        df.to_excel(excel_filepath, sheet_name=sheet_name, index=False)

        print(f'JSONデータが {excel_filepath} に正常に変換されました。')

    except FileNotFoundError:
        print(f'エラー: 指定されたJSONファイル {json_filepath} が見つかりません。')
    except json.JSONDecodeError:
        print(f'エラー: JSONファイルのデコードに失敗しました。ファイルが有効なJSON形式か確認してください。')
    except Exception as e:
        print(f'予期せぬエラーが発生しました: {e}')

if __name__ == '__main__':
    input_json_file = 'sample.json'  # 変換したいJSONファイルのパス
    output_excel_file = 'output.xlsx' # 出力するExcelファイルのパス

    json_to_excel(input_json_file, output_excel_file)

    # 別のJSONファイルを変換する例
    # input_json_file_2 = 'another_data.json'
    # output_excel_file_2 = 'another_output.xlsx'
    # json_to_excel(input_json_file_2, output_excel_file_2, sheet_name='Another Data')


コメントを入れておりますが、部分的にプログラムの処理を見ていきましょう。

まずはじめに、pandasとjsonの2つのライブラリをインポートします。
jsonは、Pythonに組み込まれている標準ライブラリで、JSON (JavaScript Object Notation) 形式のデータを扱うための機能を提供します。

import pandas as pd
import json

pandasのインポート文の pd は名前空間になります。as pd と記述することで、pandasの機能を呼び出す際に、毎回 pandas. と書く代わりに pd. と短縮して記述できるようになります。

次に、json_to_excel という関数を定義します。
この関数がJSONからExcelへの変換処理の大部分を担います。

def json_to_excel(json_filepath, excel_filepath, sheet_name='Sheet1'):
    # ...


引数:

json_filepath
入力となるJSONファイルのパスを指定
excel_filepath
出力されるExcelファイルのパスを指定
sheet_name
Excelファイル内のシート名を指定(何も指定しない場合は ‘Sheet1’ になる)



try-exceptでエラーハンドリングを行う中で、try のブロックに正常時の処理を記述していきます。
正常に処理が実行できる場合は、with ステートメントを使い、open関数で指定されたJSONファイルを開きます。’r’ は読み込みモードを意味し、encoding=’utf-8′ は日本語などの文字が正しく扱われるようにエンコーディングを指定しています。
json.load(f) は、開いたファイルオブジェクト f からJSONデータを読み込み、Pythonのリストや辞書といったオブジェクトに変換します。変換されたデータは json_data 変数に格納します。
次に、pd.DataFrame(json_data) の部分で、読み込んだ json_data (リスト内の辞書の形式)が自動的にPandasのDataFrameに変換されます。
そして、df.to_excel(excel_filepath, sheet_name=sheet_name, index=False) の部分で、 DataFrameをExcelファイルに書き出します。to_excel() メソッドを使って、DataFrameの内容をExcelファイルとして保存します。
index=False は、Pandas DataFrameはデフォルトで各行に0から始まるインデックス(番号)を持っていますが、これをFalseに設定することで、Excelファイルにはこのインデックスが出力されず、純粋なテーブルデータのみが表示されます。
最後のprint関数は、正常に変換されたメッセージの表示になります。

with open(json_filepath, 'r', encoding='utf-8') as f:
    json_data = json.load(f)
df = pd.DataFrame(json_data)
df.to_excel(excel_filepath, sheet_name=sheet_name, index=False)
print(f'JSONデータが {excel_filepath} に正常に変換されました。')


ファイルが見つからない場合は except FileNotFoundError: の処理、JSONファイルの内容が有効なJSON形式ではない場合は except json.JSONDecodeError: の処理、また、それ以外の予期せぬエラーが起きた場合は except Exception as e: の処理を実行し、ユーザーに適切なメッセージを提示します。

except FileNotFoundError:
    print(f'エラー: 指定されたJSONファイル {json_filepath} が見つかりません。')
except json.JSONDecodeError:
    print(f'エラー: JSONファイルのデコードに失敗しました。ファイルが有効なJSON形式か確認してください。')
except Exception as e:
    print(f'予期せぬエラーが発生しました: {e}')


最後に、if name == ‘main‘: の実行ブロックで、input_json_fileとoutput_excel_fileに、それぞれ入力と出力のファイルパスを設定し、定義した json_to_excel 関数をこれらのパスで呼び出し、変換処理を実行します。

if __name__ == '__main__':
    input_json_file = 'sample.json'  # 変換したいJSONファイルのパス
    output_excel_file = 'output.xlsx' # 出力するExcelファイルのパス

    json_to_excel(input_json_file, output_excel_file)



変換したいJSONファイルのパスや出力するExcelファイルのパスは、変換処理を行うPythonプログラムの json_table.py とディレクトリが違う場合、例えば json というフォルダの中に sample.json を管理しているのであれば、「input_json_file = ‘json/sample.json’」のように相対パスを指定します。

まとめ


今回ご紹介したPythonプログラムは、わずか数行のコードでJSONデータをExcelのテーブル形式に効率よく変換できることを示しています。Pandasの DataFrame は、JSONのような構造化されたデータを表形式に変換する際に非常に強力なツールとなります。

ぜひこのコードを参考に、皆さんのデータ処理タスクに役立ててみてください。