JSON文件怎么改为CSV文件:详细步骤与实用技巧
在数据处理和分析中,JSON和CSV是两种常见的数据格式,JSON(JavaScript Object Notation)以灵活的键值对形式存储结构化数据,适合嵌套和复杂数据;而CSV(Comma-Separated Values)以纯文本、逗号分隔的表格形式存储数据,更便于Excel、数据库等工具直接读取和处理,将JSON文件转换为CSV文件,能显著提升数据在表格工具中的兼容性和分析效率,本文将详细介绍转换的多种方法,从手动操作到代码实现,助你轻松完成格式转换。
JSON与CSV的核心区别:为什么需要转换?
在动手转换前,先明确两者的差异,能帮助你理解转换的必要性:
| 特性 | JSON | CSV |
|---|---|---|
| 数据结构 | 支持嵌套对象、数组、键值对等复杂数据 | 仅支持二维表格(行和列),无法直接表示嵌套 |
| 可读性 | 结构化清晰,适合机器解析 | 纯文本,适合人工查看简单表格数据 |
| 工具兼容性 | 需通过代码或专用工具解析 | Excel、WPS、数据库等原生支持 |
| 适用场景 | API数据交换、配置文件、复杂数据存储 | 数据分析、报表生成、简单数据导出 |
如果你的JSON数据是扁平结构(无嵌套),转换CSV较简单;若存在嵌套,需先“展平”数据(将嵌套对象拆分为多列,数组拆分为多行或合并为字符串)。
方法一:手动转换(适合小型JSON文件)
如果你的JSON数据量较小(如几十行),可通过手动操作完成转换,无需编程工具,核心步骤是:解析JSON结构 → 提取键作为CSV表头 → 按行填充数据。
示例JSON数据(扁平结构)
假设有一个students.json如下:
[
{"id": 1, "name": "张三", "age": 18, "gender": "男"},
{"id": 2, "name": "李四", "age": 20, "gender": "女"},
{"id": 3, "name": "王五", "age": 19, "gender": "男"}
]
手动转换步骤
- 提取表头:观察JSON,所有对象的键即为CSV的列名,按顺序排列:
id,name,age,gender。 - 填充数据:按行提取每个对象的值,用逗号分隔,注意:若值中包含逗号或换行符,需用双引号包裹(本例无需)。
- 生成CSV:将表头和数据合并为文本,保存为
.csv文件。
转换后的CSV内容:
id,name,age,gender 1,张三,18,男 2,李四,20,女 3,王五,19,男
注意事项
- 逗号和引号处理:若JSON值中包含逗号(如
"address": "北京市,朝阳区"),CSV中需用双引号包裹该值:"北京市,朝阳区",避免解析错误。 - 编码问题:保存CSV时,建议选择
UTF-8 with BOM编码,避免Excel打开时中文乱码。
方法二:使用在线转换工具(适合无编程基础的用户)
如果你不想写代码,或JSON数据量中等(几百行),可借助在线工具快速转换,推荐工具:ConvertJSON(https://www.convertcsv.com/json-to-csv.htm)、JSON to CSV(https://www.easyunitconverter.com/json-to-csv)等。
操作步骤(以ConvertJSON为例)
- 上传JSON文件:打开网站,点击“Choose File”上传本地JSON文件,或直接粘贴JSON文本。
- 配置转换参数:
- 选择JSON结构:工具会自动识别JSON是“数组对象”还是“单个对象”,若数据是数组(如示例),选择“Array of Objects”。
- 设置分隔符:默认为逗号(),若需其他分隔符(如分号),可修改。
- 处理表头:默认保留JSON的键作为CSV表头,可勾选“Include Header”。
- 预览并下载:点击“Convert”预览CSV效果,确认无误后点击“Download”保存文件。
优缺点
- 优点:操作简单,无需编程,适合非技术人员。
- 缺点:
- 隐私风险:上传敏感数据(如个人信息)时,可能存在数据泄露风险。
- 数据量限制:多数在线工具对文件大小有限制(如不超过10MB),大型JSON文件无法处理。
方法三:编程实现(适合批量处理或嵌套JSON)
对于大型JSON文件(GB级)、嵌套结构数据,或需要批量转换的场景,编程实现是最灵活、高效的方式,本文以Python为例(代码简洁,库丰富),介绍两种常用方法:pandas库(适合数据分析)和csv+json标准库(适合轻量级处理)。
准备工作:安装Python库
若使用pandas,需先安装(推荐使用Anaconda,已内置pandas):
pip install pandas
方法3.1:使用pandas库(推荐,适合大多数场景)
pandas是Python数据分析的核心库,能自动处理JSON解析、表头生成、数据类型转换等,尤其适合结构化数据。
示例1:扁平JSON转换(无嵌套)
以students.json为例,代码如下:
import pandas as pd
# 读取JSON文件
df = pd.read_json('students.json')
# 转换为CSV(index=False表示不保存行索引,encoding='utf-8-sig'避免Excel乱码)
df.to_csv('students.csv', index=False, encoding='utf-8-sig')
print("转换完成!")
运行后,生成的students.csv与手动转换结果一致。
示例2:嵌套JSON转换(需展平数据)
若JSON包含嵌套对象或数组,需先“展平”(flatten),例如employees.json:
[
{"id": 101, "name": "赵六", "contact": {"email": "zliu@example.com", "phone": "13800138000"}, "skills": ["Python", "SQL"]},
{"id": 102, "name": "钱七", "contact": {"email": "qqi@example.com", "phone": "13900139000"}, "skills": ["Java", "Excel"]}
]
转换思路:将嵌套的contact对象拆分为contact_email和contact_phone列,skills数组合并为字符串(或拆分为多行),使用pandas.json_normalize()展平数据:
import pandas as pd
# 读取JSON并展平(记录路径,用下划线连接嵌套键)
df = pd.json_normalize('employees.json', record_path=None, meta=['id', 'name'], sep='_')
# 若skills数组需合并为字符串(用逗号分隔)
df['skills'] = df['skills'].apply(lambda x: ', '.join(x) if isinstance(x, list) else x)
# 转换为CSV
df.to_csv('employees.csv', index=False, encoding='utf-8-sig')
print("转换完成!")
生成的employees.csv:
id,name,contact_email,contact_phone,skills 101,赵六,zliu@example.com,13800138000,Python, SQL 102,钱七,qqi@example.com,13900139000,Java, Excel
方法3.2:使用csv和json标准库(适合轻量级处理)
若不想安装第三方库,可用Python内置的json和csv模块手动转换,适合简单JSON结构。
示例:扁平JSON转换
import json
import csv
# 读取JSON文件
with open('students.json', 'r', encoding='utf-8') as f:
data = json.load(f) # 解析为Python列表
# 获取表头(所有对象的键,假设所有对象键相同)
header = data[0].keys() if data else []
# 写入CSV文件
with open('students.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writeheader() # 写入表头
writer.writerows(data) # 写入数据
print("转换完成!")
编程方法的优缺点
- 优点:
灵活性高:可自定义处理逻辑(



还没有评论,来说两句吧...