求助:将含嵌套行的大型XLSX文件转换为指定结构JSON
我明白你现在的痛点——在线工具和基础的npm包都没法识别XLSX里的嵌套行逻辑,直接输出了扁平JSON,完全不符合你要的嵌套格式。别担心,咱们可以用更灵活的自定义解析方式来解决,下面是具体方案:
解决方案:自定义解析XLSX构建嵌套JSON
因为你的XLSX存在嵌套行结构(主物料条目下紧跟子物料Chemical_extract的信息),通用转换工具没法识别这种业务规则,所以需要手动编写解析逻辑。这里推荐用xlsx npm包(比xlsx-to-json更底层、更灵活)来实现。
步骤1:安装依赖
先安装核心处理包:
npm install xlsx
步骤2:编写自定义解析脚本
假设你的XLSX结构是「主物料行包含基础信息,紧接着的一行是子物料Chemical_extract的详情」(你需要根据自己实际的XLSX行列对应关系调整脚本里的字段映射!):
const XLSX = require('xlsx'); // 读取目标XLSX文件 const workbook = XLSX.readFile('./your-materials.xlsx'); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 把工作表转成原始JSON数组(扁平结构) const rawFlatData = XLSX.utils.sheet_to_json(worksheet); // 构建嵌套JSON的核心逻辑 const nestedResult = []; let currentMainMaterial = null; for (const row of rawFlatData) { // 判断当前行是主物料还是子物料(请根据你的XLSX规则调整判断条件) // 示例规则:主物料行包含HSCode字段,子物料行包含CASNo字段 if (row['HS Code']) { // 初始化主物料对象,映射你需要的字段 currentMainMaterial = { MaterialName: row['Material Name'], HSCode: row['HS Code'], DescriptionInArabic: row['Description In Arabic'], UsingInArabic: row['Using In Arabic'], SupplierName: row['Supplier Name'], BySea: row['By Sea'], ByAir: row['By Air'], Total: row['Total'], UOM: row['UOM'], Chemical_extract: null // 预留子物料位置 }; nestedResult.push(currentMainMaterial); } else if (row['CAS No'] && currentMainMaterial) { // 填充子物料信息到当前主物料的Chemical_extract字段 currentMainMaterial.Chemical_extract = { MaterialName: row['Material Name'], 'Name of material': row['اسم المادة'], UN: row['الرقم الدولي UN'], CASNo: row['CAS No'], percentage: row['النسبة المئوية'] }; } } // 输出最终嵌套JSON(也可以写入文件) console.log(JSON.stringify(nestedResult, null, 2));
关键注意事项
- 行识别规则:你必须根据自己XLSX的实际结构调整主/子行的判断条件(比如如果是合并单元格区分主行,就改成判断单元格合并属性;如果是固定间隔行,就用索引判断)。
- 字段映射:脚本里的
row['XXX']要和你XLSX里的表头完全匹配,同时要对应到你期望的JSON字段名(比如把Description In Arabic改成驼峰式的DescriptionInArabic)。 - 多子物料扩展:如果一个主物料下有多个子物料,只需把
Chemical_extract改成数组,在子行判断时用push添加即可。
测试与调整
运行脚本后,你会得到和你期望结构完全一致的嵌套JSON。如果出现格式问题,优先检查:
- XLSX表头是否和脚本里的键名完全匹配
- 主/子行的判断逻辑是否符合你的表格规则
- 字段类型是否正确(比如
HSCode是数字,确保XLSX里该列是数字格式)
内容的提问来源于stack exchange,提问作者irkoch
相关产品推荐
相关产品推荐

