Python中解析JSON并将字段不一致的JSON数据写入CSV文件的实现咨询
解决方案:统一JSON字段并导出为CSV
嘿,这问题我之前也碰到过!字段不统一确实很头疼,不过用Python处理起来其实挺简单的,我给你两种解决方案,一种是用基础库手动处理(灵活性高),另一种是用pandas快速搞定(代码简洁),你可以按需选择。
方法一:使用Python标准库手动处理
这种方法不需要额外安装依赖,适合需要自定义处理逻辑的场景。
步骤1:读取并解析JSON数据
首先我们从文件中读取JSON并解析成Python对象:
import json import csv # 读取JSON文件(替换成你的文件路径) with open('books_data.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) books_list = raw_data['books']
步骤2:收集所有唯一字段
遍历所有book对象,把所有出现过的字段收集起来,确保我们不会遗漏任何可能的字段:
# 用集合去重,收集所有字段 all_fields = set() for book in books_list: all_fields.update(book.keys()) # 转成排序后的列表,保证CSV的列顺序固定 all_fields = sorted(all_fields)
步骤3:补全缺失字段并扁平化数据
对每个book对象,检查每个字段是否存在,不存在就设为空字符串:
flattened_books = [] for book in books_list: # 用dict.get()方法,第二个参数是默认值(空字符串) flattened_book = {field: book.get(field, "") for field in all_fields} # 可选:如果有列表类型的字段(比如你的field2),可以转成逗号分隔的字符串 # if isinstance(flattened_book['field2'], list): # flattened_book['field2'] = ', '.join(flattened_book['field2']) flattened_books.append(flattened_book)
步骤4:写入CSV文件
用csv.DictWriter把处理好的数据写入CSV:
with open('books_output.csv', 'w', newline='', encoding='utf-8') as f: # 指定列名 writer = csv.DictWriter(f, fieldnames=all_fields) # 写入表头 writer.writeheader() # 写入所有行数据 writer.writerows(flattened_books)
方法二:使用Pandas快速处理
如果你已经安装了Pandas,那这个方法会更简洁,Pandas会自动帮你处理缺失字段:
步骤1:读取JSON并转为DataFrame
import pandas as pd import json with open('books_data.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 直接把books列表转成DataFrame,缺失的字段会自动填充为NaN df = pd.DataFrame(raw_data['books'])
步骤2:替换缺失值为空字符串
把DataFrame中的NaN替换成空字符串:
df = df.fillna("")
步骤3:写入CSV文件
# index=False表示不写入行索引 df.to_csv('books_pandas_output.csv', index=False, encoding='utf-8')
额外说明
- 如果你需要处理列表类型的字段(比如示例中的
field2),可以在扁平化的时候把列表转为逗号分隔的字符串,这样CSV里的内容会更易读。 - 两种方法都能实现你要的扁平化结构,基础方法适合需要精细控制的场景,Pandas方法适合快速开发。
内容的提问来源于stack exchange,提问作者Kulwant
相关产品推荐
相关产品推荐

