使用JavaScript将CSV转换为分组后含指标数组的JSON格式
解决方案:CSV转指定结构JSON的JavaScript实现
这里有一个可以直接运行的JavaScript代码片段,完美实现你需要的转换逻辑——按name和region组合分组,将年份与对应指标(人口、收入)组成嵌套数组:
function convertCsvToTargetJson(csvString) { // 1. 处理CSV字符串,分割成行并过滤空行 const lines = csvString.split('\n').filter(line => line.trim() !== ''); // 2. 提取表头并清理引号、空格 const headers = lines[0].split(',').map(header => header.trim().replace(/"/g, '')); // 3. 初始化分组容器,用`name-region`作为唯一键避免重复 const groups = {}; // 4. 遍历数据行(跳过表头) for (let i = 1; i < lines.length; i++) { // 分割字段并清理引号、空格 const fields = lines[i].split(',').map(field => field.trim().replace(/"/g, '')); // 提取并转换数据类型(CSV读出来的都是字符串,要转成数字) const name = fields[0]; const region = fields[1]; const year = Number(fields[2]); const population = Number(fields[3]); const income = Number(fields[4]); // 生成分组唯一键 const groupKey = `${name}-${region}`; // 5. 如果分组不存在,先初始化基础结构 if (!groups[groupKey]) { groups[groupKey] = { name, region, population: [], income: [] }; } // 6. 将年份与指标配对后加入对应数组 groups[groupKey].population.push([year, population]); groups[groupKey].income.push([year, income]); } // 7. 将分组对象转换为数组,得到最终JSON结构 return Object.values(groups); } // 测试用例:代入你提供的CSV数据 const csvData = `name, region, year, population, income "USA", "America", 2000, 111, 444 "USA", "America", 2001, 222, 555 "USA", "America", 2002, 333, 666 "Germany", "Europe", 2000, 777, 888`; const resultJson = convertCsvToTargetJson(csvData); console.log(JSON.stringify(resultJson));
代码逻辑说明:
- CSV解析:先把CSV字符串按行分割,过滤掉空行,再处理表头和数据字段,去除多余的引号和空格,避免格式干扰。
- 分组策略:用
name-region作为唯一键,确保同国家同地区的数据会被分到同一组,不会出现重复条目。 - 数据类型转换:把CSV里的字符串类型年份、人口、收入转换为数字类型,保证最终JSON的数值格式符合预期。
- 结构构建:每个分组初始化时创建对应字段,随后将
[年份, 指标值]的数组推入对应字段,最后把分组对象转为数组得到目标结构。
运行这段代码后,你会得到完全符合预期的JSON输出。
内容的提问来源于stack exchange,提问作者Geralt
相关产品推荐
相关产品推荐

