PythonでネストされたJSONファイルをフラットに変換する方法

この記事では、Pythonを使用してネストされたJSONファイルのデータ構造をフラットに変換する方法を詳しく解説します。具体的なコード例とその解説、応用例を含めています。

目次

はじめに

JSON(JavaScript Object Notation)は、データ交換フォーマットの一つです。しかし、時として非常に複雑なネストされた構造を持っている場合があります。そのような複雑なデータ構造を簡単に解析・使用するためには、データをフラットな形に変換する必要があります。

基本的な方法

Pythonにはjsonライブラリが標準で備わっており、これを使用してJSONデータを解析できます。では早速、基本的なフラット化の手法を見ていきましょう。

サンプルコード

import json

def flatten_json(y):
    out = {}
    
    def flatten(x, name=''):
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + '_')
        elif type(x) is list:
            i = 0
            for a in x:
                flatten(a, name + str(i) + '_')
                i += 1
        else:
            out[name[:-1]] = x

    flatten(y)
    return out

# サンプルデータ
nested_json = {
    "name": "John",
    "info": {
        "email": "john@email.com",
        "address": {
            "city": "Tokyo",
            "zip": "100-0001"
        }
    },
    "languages": ["English", "Japanese"]
}

# フラット化
flattened_data = flatten_json(nested_json)
print(flattened_data)

コード解説

このプログラムでは`flatten_json`関数を定義しています。この関数はネストされたJSONデータを引数として受け取り、フラットな辞書として出力します。

– `flatten`は再帰関数であり、各レベルのJSONデータを解析します。
– `out`はフラットなデータを保存するための辞書です。

応用例

上記の基本例を応用して、さまざまな状況での使用例を考えてみましょう。

例1: ファイルからJSONデータを読み込む

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

この例では、`sample.json`という名前のファイルからJSONデータを読み込み、フラット化しています。

例2: フラットデータをCSVに変換する

import csv

def write_to_csv(data, filename):
    with open(filename, 'w') as f:
        writer = csv.DictWriter(f, fieldnames=data.keys())
        writer.writeheader()
        writer.writerow(data)

write_to_csv(flattened_data, 'flattened.csv')

例3: フラットデータをAPIにPOSTする

import requests

response = requests.post('https://api.example.com/upload', json=flattened_data)
print(response.status_code)

この例では、フラットにしたデータをAPIにPOSTしています。

まとめ

Pythonを使ってネストされたJSONファイルのデータ構造をフラットに変換する方法について解説しました。基本的な方法から応用例までを詳しく見てきましたので、これを機にPythonでのデータ処理を一歩進めてみてはいかがでしょうか。

コメント

コメントする

目次