You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:30:53