如何用Node.js将皇室战争CSV转换为指定格式的JSON?
解决《皇室战争》CSV转JSON并合并数组的需求
你的问题核心是CSV里同类型条目用多行拆分(比如common的升级成本占了4行),需要把这些分散的数值合并成数组,而非每行生成独立对象。现有代码仅把每行数据单独存入数组,未做合并处理,需修改数据逻辑实现需求:
修改后的代码
const fs = require('fs') const papa = require("papaparse") const results = [] let currentItem = null const options = { header: true, dynamicTyping: true } fs.createReadStream("rarities.csv") .pipe(papa.parse(papa.NODE_STREAM_INPUT, options)) .on("data", (data) => { // 遇到带名称的行,判定为新的稀有度条目 if (data.名称) { // 若存在未完成的条目,先存入结果数组 if (currentItem) { results.push(currentItem) } // 初始化新条目,将upgrade_cost设为数组并加入当前行成本 currentItem = { name: data.名称, level_count: data.等级数量, upgrade_cost: [data.升级成本] } } else { // 无名称的行,把当前成本追加到当前条目的数组中 if (currentItem) { currentItem.upgrade_cost.push(data.升级成本) } } }) .on("end", () => { // 把最后一个未存入的条目加入结果 if (currentItem) { results.push(currentItem) } // 输出格式化后的JSON console.log(JSON.stringify(results, null, 2)) })
关键逻辑说明
- 用
currentItem变量跟踪当前正在组装的条目,避免每行生成独立对象 - 读取到带
名称的行时,先存入之前组装好的条目,再初始化新条目,同时把当前行的升级成本作为数组首个元素 - 空名称的行仅负责将升级成本追加到当前条目的数组中
- 流结束时需将最后一个条目加入结果,避免遗漏
适配多属性场景
你提到实际有40余个属性,类似升级成本这类多行拆分的属性,都可复用此逻辑:初始化时将对应字段设为数组,空行时追加数值即可;单一值属性(如等级数量)直接在初始化时赋值即可。
内容的提问来源于stack exchange,提问作者JameyPlay
相关产品推荐
相关产品推荐

