如何用JavaScript/Node.js将含数组的嵌套JSON转为类似json2table的Excel表格
解决嵌套JSON转Excel的数组/对象展开问题
预处理JSON数据
直接用json2xls或xlsx默认转换嵌套结构会丢失细节,得先把嵌套的数组和对象扁平展开,模拟json2table的结构化展示效果。
举个示例JSON:
{ "name": "张三", "id": 101, "subjects": [ {"name": "数学", "score": 90}, {"name": "语文", "score": 85} ], "teachers": {"math": "李老师", "chinese": "王老师"} }
方案1:数组拆分行(一对多展开)
把数组的每个元素对应一行,重复主数据字段,适合查看每条明细:
const flattenData = (data) => { let result = []; // 拆解teachers对象为单独字段 const teacherFields = Object.entries(data.teachers).reduce((acc, [key, val]) => { acc[`teacher_${key}`] = val; return acc; }, {}); // 遍历subjects数组生成每行数据 data.subjects.forEach(subject => { result.push({ name: data.name, id: data.id, subject_name: subject.name, subject_score: subject.score, ...teacherFields }); }); return result; };
方案2:数组拼接成字符串(保留单行)
如果要保持原数据行数,把数组元素的属性拼接成可读字符串:
const flattenData = (data) => { return { name: data.name, id: data.id, subjects: data.subjects.map(s => `${s.name}: ${s.score}`).join('; '), teacher_math: data.teachers.math, teacher_chinese: data.teachers.chinese }; };
用xlsx包生成Excel
预处理后的数据再传入Excel生成工具,就能得到预期格式:
const XLSX = require('xlsx'); // 假设已得到预处理后的flattenedData(数组格式) const worksheet = XLSX.utils.json_to_sheet(flattenedData); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '学生数据'); XLSX.writeFile(workbook, '学生信息.xlsx');
注意事项
- 多层嵌套结构需要递归处理,避免遗漏字段
- 根据业务需求选择展开方式:明细优先选拆分行,概览优先选字符串拼接
json2xls同样需要先扁平处理数据,它本身不支持自动展开嵌套结构
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

