TypeScript项目中JSON对象格式转换需求:拆分表头与数据列并封装为指定结构
TypeScript JSON数组转结构化表格数据格式
刚好做过类似的需求,给你写个完整的TypeScript解决方案,兼顾类型安全和边界情况处理:
第一步:定义原始数据的类型接口
先给你的输入数据定义类型,写代码时能有类型提示,避免低级错误:
interface OriginalDataItem { id: string; ser: string | null; IP: string | null; host: string; type: string; auth: string; }
第二步:编写转换函数
这个函数会把你的数组转换成目标格式,还特意处理了空输入的边界情况:
function transformToTableFormat(data: OriginalDataItem[]): { values: (string | null)[][] } { // 空数组直接返回空结构,避免后续代码报错 if (data.length === 0) { return { values: [] }; } // 建议手动指定表头顺序(比依赖对象键顺序更可靠,不怕后端返回键顺序变化) const headers: (keyof OriginalDataItem)[] = ["id", "ser", "IP", "host", "type", "auth"]; // 把每个对象转换成对应的值数组,严格匹配表头顺序 const dataRows = data.map(item => headers.map(key => item[key])); // 组合表头和数据行,封装到values属性中 return { values: [headers, ...dataRows] }; }
第三步:使用示例
把你的原始数据传进去,就能得到完全符合预期的结果:
// 你的原始输入数据 const inputData: OriginalDataItem[] = [ { "id": "1", "ser": null, "IP": null, "host": "", "type": "Web", "auth": "" }, { "id": "2", "ser": null, "IP": "191.174.230.02", "host": "", "type": "Proxy", "auth": "" } ]; const transformedResult = transformToTableFormat(inputData); console.log(transformedResult);
补充说明
- 手动指定表头是为了避免依赖对象键的顺序——虽然ES2015+之后对象键顺序会被保留,但如果数据来源不可控(比如后端返回的键顺序可能调整),手动指定能确保输出顺序完全符合你的需求;
- 函数里加了空数组判断,避免输入为空时调用
Object.keys(data[0])出现报错; - 全程用TypeScript类型系统做约束,能提前发现键名拼写错误、值类型不匹配等问题。
内容的提问来源于stack exchange,提问作者print




