You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:07:08