📅  最后修改于: 2023-12-03 15:07:55.756000             🧑  作者: Mango
在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。
希望这个代码片段对您有所帮助!