JSON格式如何转换成CSV:实用指南与代码示例
在数据处理和分析中,JSON(JavaScript Object Notation)和CSV(Comma-Separated Values)是两种常见的数据格式,JSON以灵活的键值对结构存储数据,适合前后端交互和复杂嵌套数据;而CSV以表格形式存储数据,适合Excel、数据库等工具直接处理,将JSON转换为CSV,能更方便地进行数据清洗、统计分析或导入传统表格工具,本文将详细介绍JSON转CSV的转换方法,包括手动转换、编程实现(Python/JavaScript)及工具推荐,帮助不同需求的读者快速完成格式转换。
JSON与CSV的核心差异
在转换前,需先理解两者的结构特点:
- JSON:支持嵌套结构(对象、数组),数据类型灵活(字符串、数字、布尔值、null等),
[ {"id": 1, "name": "张三", "age": 25, "hobbies": ["篮球", "阅读"]}, {"id": 2, "name": "李四", "age": 30, "hobbies": ["游泳", "编程"]} ] - CSV:扁平化的二维表格,每行一条记录,列之间用逗号分隔,不支持嵌套,
id,name,age,hobbies 1,张三,25,"篮球,阅读" 2,李四,30,"游泳,编程"
核心挑战:处理JSON中的嵌套数据(如数组、对象),需将其转换为CSV的列格式。
手动转换:简单JSON的快速处理
对于结构简单的JSON(无嵌套或仅有一层嵌套),可通过手动整理转换:
示例JSON:
[
{"id": 1, "name": "手机", "price": 2999, "category": "电子产品"},
{"id": 2, "name": "书籍", "price": 49, "category": "文具"}
]
手动转换步骤:
- 提取列名:从JSON对象的键中提取列名(id, name, price, category),作为CSV的表头。
- 填充数据行:将每个对象的值按列顺序填充,用逗号分隔。
- 处理特殊字符:若字段包含逗号、引号等特殊字符,需用双引号包裹(如
"手机,5G")。
转换后的CSV:
id,name,price,category 1,手机,2999,电子产品 2,书籍,49,文具
适用场景:数据量小(几十行以内)、结构简单,无需编程时快速处理。
编程实现:自动化转换复杂JSON
当数据量大或JSON结构复杂(含嵌套/数组)时,编程实现更高效,以下是Python和JavaScript的常用方法。
方法1:Python(推荐使用pandas或csv模块)
Python是数据处理的首选语言,pandas库能简化JSON转CSV的操作,尤其适合复杂结构。
(1)使用pandas(推荐)
pandas的json_normalize()函数可自动处理嵌套数据,适合JSON数组转表格。
示例代码:
import pandas as pd
import json
# 示例JSON(含嵌套数组)
json_data = """
[
{"id": 1, "name": "张三", "age": 25, "hobbies": ["篮球", "阅读"]},
{"id": 2, "name": "李四", "age": 30, "hobbies": ["游泳", "编程"]}
]
"""
# 解析JSON为DataFrame
data = pd.read_json(json_data)
# 处理嵌套数组:将hobbies列表转换为逗号分隔的字符串
data['hobbies'] = data['hobbies'].apply(lambda x: ','.join(x))
# 保存为CSV(index=False表示不保存行索引)
data.to_csv('output.csv', index=False, encoding='utf-8-sig') # utf-8-sig解决Excel中文乱码
print("转换完成,CSV文件已保存为 output.csv")
输出CSV:
id,name,age,hobbies 1,张三,25,篮球,阅读 2,李四,30,游泳,编程
(2)使用csv模块(轻量级处理)
若不想依赖pandas,可用Python内置csv模块手动处理。
示例代码:
import csv
import json
# 示例JSON
json_data = '[{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]'
data = json.loads(json_data)
# 提取列名(JSON对象的第一个键)
fieldnames = data[0].keys()
# 写入CSV
with open('output.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() # 写入表头
writer.writerows(data) # 写入数据行
print("转换完成,CSV文件已保存为 output.csv")
适用场景:pandas适合复杂数据(嵌套、多级表头),csv模块适合轻量级、无嵌套的JSON。
方法2:JavaScript(Node.js环境)
若需在前端或Node.js环境中转换,可通过json2csv库实现。
(1)安装json2csv库
npm install json2csv
(2)示例代码
const { Parser } = require('json2csv');
const fs = require('fs');
// 示例JSON(含嵌套对象)
const jsonData = [
{
id: 1,
name: "王五",
contact: {
email: "wangwu@example.com",
phone: "13800138000"
},
hobbies: ["游戏", "旅行"]
},
{
id: 2,
name: "赵六",
contact: {
email: "zhaoliu@example.com",
phone: "13900139000"
},
hobbies: ["音乐", "电影"]
}
];
// 配置转换选项:处理嵌套对象(contact.email转为contact_email)
const fields = [
{ label: 'ID', value: 'id' },
{ label: '姓名', value: 'name' },
{ label: '邮箱', value: 'contact.email' },
{ label: '电话', value: 'contact.phone' },
{ label: '爱好', value: 'hobbies', default: '' } // 爱好列表默认转为逗号分隔
];
const parser = new Parser({ fields });
const csv = parser.parse(jsonData);
// 写入CSV文件
fs.writeFileSync('output.csv', csv, 'utf-8');
console.log('转换完成,CSV文件已保存为 output.csv');
输出CSV:
ID,姓名,邮箱,电话,爱好 1,王五,wangwu@example.com,13800138000,"游戏,旅行" 2,赵六,zhaoliu@example.com,13900139000,"音乐,电影"
适用场景:Node.js后端处理、前端浏览器环境(需引入json2csv的CDN)。
在线工具:无需编程的快速转换
若不想写代码,可使用在线JSON转CSV工具,适合快速处理少量数据:
推荐工具:
-
ConvertCSV(https://www.convertcsv.com/json-to-csv.htm)
- 支持拖拽上传JSON文件,可自定义分隔符、表头等。
- 支持预览转换结果,直接下载CSV。
-
JSON to CSV Converter(https://www.bejson.com/json/2csv/)
- 提供在线编辑框,可直接粘贴JSON数据。
- 自动处理嵌套数据,支持中文字符。
使用步骤:
- 打开在线工具网站。
- 粘贴或上传JSON文件。
- 配置转换参数(如是否包含表头、分隔符等)。
- 点击“转换”,下载CSV文件。
注意:在线工具不适合处理敏感数据(如个人信息),数据量大时可能存在性能问题。
转换中的常见问题与解决方案
嵌套数据如何处理?
- 数组:用
join()转换为逗号分隔的字符串(如["篮球", "阅读"]→"篮球,阅读")。 - 对象:展开为多列(如
{"contact": {"email": "a@b.com"}}→contact_email列)。
中文字符乱码怎么办?
- Python中,
open()函数需指定encoding='utf-8-sig'(utf-8-sig会在文件开头添加BOM头,兼容Excel)。 - JavaScript中



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