📜  在Python中将嵌套的 JSON 转换为 CSV(1)

📅  最后修改于: 2023-12-03 15:07:55.756000             🧑  作者: Mango

在Python中将嵌套的 JSON 转换为 CSV

在Python中,我们可以使用标准库中的json模块来处理JSON数据,并使用csv模块来处理CSV文件。

对于嵌套的JSON数据,我们可以采用递归的方式来处理,将每个子对象中的数据分离出来,然后将它们转换为CSV行。

下面是一个示例代码片段,介绍了如何将嵌套的JSON数据转换为CSV文件。

import json
import csv

def flatten_json(obj, parent_key='', sep='_'):
    """
    递归将嵌套的JSON对象展开
    """
    if isinstance(obj, dict):
        rows = []
        for key, value in obj.items():
            new_key = parent_key + sep + key if parent_key else key
            rows.extend(flatten_json(value, new_key, sep).items())
        return dict(rows)
    elif isinstance(obj, list):
        rows = []
        for index, item in enumerate(obj):
            rows.extend(flatten_json(item, parent_key + sep + str(index) if parent_key else str(index), sep).items())
        return dict(rows)
    else:
        return {parent_key: obj}

def convert_to_csv(json_data, csv_filepath):
    """
    将JSON对象转换为CSV文件
    """
    flattened_data = [flatten_json(data) for data in json_data]
    headers = list(set([key for data in flattened_data for key in data.keys()]))
    with open(csv_filepath, 'w', newline='') as outfile:
        writer = csv.DictWriter(outfile, fieldnames=headers)
        writer.writeheader()
        for data in flattened_data:
            writer.writerow({key: data.get(key, '') for key in headers})

该代码包含两个函数:

  • flatten_json:该函数接受一个JSON对象,并返回一个展开的字典对象。如果JSON对象包含嵌套的子对象,则每个子对象都会被展开为一个叶节点。例如,将{"a": {"b": 1}}展开为{"a_b": 1}。
  • convert_to_csv:该函数接受一个包含JSON对象的列表,并将其转换为CSV文件。首先,它使用flatten_json函数将每个JSON对象展开为一个字典。接下来,它确定CSV文件中的头部(即所有可能的键)。最后,它将展开的数据写入CSV文件中。

为了使用这些函数,您可以将您的JSON数据加载到Python中,然后调用convert_to_csv函数。例如:

json_data = json.loads('{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}]}')
convert_to_csv(json_data['employees'], 'output.csv')

在这个例子中,我们将嵌套的JSON数据转换为CSV文件output.csv。

希望这个代码片段对您有所帮助!