如何编写函数重构XLSX导出的JSON响应数据结构
重构XLSX导出的JSON层级结构
刚好碰到过类似的XLSX导出结构问题,直接给你一个可复用的JavaScript函数来完成重构,完全匹配你想要的嵌套结构:
首先先明确输入输出的对比:
原始输入JSON
{ "Produtos": [ [ "SP", "Hamburgueria" ], [ null, null, "IN00001282", "Batata 7 MM Corte Fino McCain 2,25 Kg - Caixa com 8 Unidades", "$8.85", "$1.11" ], [ null, null, "IN000155937", "Copo De Fritas 480 ml Kraft - 1000 Unidades", "$394.74", "$0.39" ] ] }
期望输出JSON
{ "Produtos": { "SP": { "Hamburgueria": [ [ null, null, "IN00001282", "Batata 7 MM Corte Fino McCain 2,25 Kg - Caixa com 8 Unidades", "$8.85", "$1.11" ], [ null, null, "IN000155937", "Copo De Fritas 480 ml Kraft - 1000 Unidades", "$394.74", "$0.39" ] ] } } }
(注:你示例里的商品名是截断的,如果你需要截断长名称,可以看后面的扩展处理)
重构函数实现
function restructureProductData(originalJson) { // 提取第一组数据作为地区和门店名称 const [region, storeName] = originalJson.Produtos[0]; // 提取后续所有子数组作为该门店的商品列表 const storeProducts = originalJson.Produtos.slice(1); // 构建嵌套结构,用计算属性名动态生成键 return { Produtos: { [region]: { [storeName]: storeProducts } } }; } // 测试使用 const originalData = { "Produtos": [ [ "SP", "Hamburgueria" ], [ null, null, "IN00001282", "Batata 7 MM Corte Fino McCain 2,25 Kg - Caixa com 8 Unidades", "$8.85", "$1.11" ], [ null, null, "IN000155937", "Copo De Fritas 480 ml Kraft - 1000 Unidades", "$394.74", "$0.39" ] ] }; const restructuredData = restructureProductData(originalData); console.log(JSON.stringify(restructuredData, null, 2));
代码解释
- 提取层级信息:从
originalJson.Produtos的第一个子数组里,解构出地区(SP)和门店名(Hamburgueria)。 - 收集商品列表:用
slice(1)跳过第一个层级数组,把剩下的所有商品子数组收集起来。 - 构建嵌套对象:利用ES6的计算属性名(
[region]和[storeName]),动态把地区和门店作为对象的键,商品列表放到对应的门店下。
扩展:截断长商品名称
如果你需要像示例里那样截断过长的商品名称,可以在收集商品列表时添加一个映射处理:
const storeProducts = originalJson.Produtos.slice(1).map(product => { const updatedProduct = [...product]; // 商品名称在数组的第4个位置(索引3),这里设置截断到30个字符 const maxNameLength = 30; if (updatedProduct[3] && updatedProduct[3].length > maxNameLength) { updatedProduct[3] = `${updatedProduct[3].slice(0, maxNameLength)}...`; } return updatedProduct; });
这样处理后,商品名称就会变成类似Batata 7 MM Corte Fino McC...的格式。
内容的提问来源于stack exchange,提问作者Victor Batista
相关产品推荐
相关产品推荐

