如何使用node.js将CSV转换为JSON?[已关闭]

fdbelqdn  于 2022-11-19  发布在  Node.js
关注(0)|答案(2)|浏览(160)

已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

昨天关门了。
这篇文章是昨天编辑并提交审查的。
Improve this question
我尝试从Clash Royale转换CSV。
我想把行中数字压入数组
真实的csv数据头或属性超过40个属性
示例数据:
| 姓名|电平计数器|升级成本|
| - -|- -|- -|
| 普通的|十四|五个|
| | | 二十个|
| | | 五十个|
| | | 100个|
| 稀有的|十二|五十个|
| | | 一百五十个|
| | | 四百|
| | | 千|
我的node.js代码:

const fs = require('fs')
const papa = require("papaparse")

const results = []
const options = { header: true, dynamicTyping: true }

fs.createReadStream("rarities.csv")
    .pipe(papa.parse(papa.NODE_STREAM_INPUT, options))
    .on("data", (data) => results.push(data))
    .on("end", () => console.log(results))

输出预期:

[
           {
               name: "common",
               level_count: 14,
               upgrade_cost: [5, 20, 50, 100]
           },
           {
               name: "rare",
               level_count: 12,
               upgrade_cost: [50, 150, 400, 1000]
           },
       ]
um6iljoc

um6iljoc1#

我想你应该尝试一下

.on("end", () => {
  let savedName, savedLevelCount

  const goupedByNameAndLevelCount = results.reduce((acc, { name, level_count, upgrade_cost }) => {
    if (name && level_count) {
      savedName = name
      savedLevelCount = level_count
    }
    acc[savedName] ||= {}
    acc[savedName][savedLevelCount] ||= []
    acc[savedName][savedLevelCount].push(upgrade_cost)
    return acc
  }, {})
  const preciousData = Object.entries(goupedByNameAndLevelCount).map(([name, groupedByLevelCount]) => {
    return Object.entries(groupedByLevelCount).map(([level_count, upgrade_cost]) => ({
      name,
      level_count,
      upgrade_cost
    }))
  })
  console.log(preciousData)
})

样品

以此为结果

const results = [
  { name: 'common', level_count: 14, upgrade_cost: 5 },
  { upgrade_cost: 20 },
  { upgrade_cost: 50 },
  { upgrade_cost: 100 },
  { name: 'rare', level_count: 12, upgrade_cost: 50 },
  { upgrade_cost: 150 },
  { upgrade_cost: 400 },
  { upgrade_cost: 1000 },
]

我们得到了

[
  [
    {
      "name": "common",
      "level_count": "14",
      "upgrade_cost": [
        5,
        20,
        50,
        100
      ]
    }
  ],
  [
    {
      "name": "rare",
      "level_count": "12",
      "upgrade_cost": [
        50,
        150,
        400,
        1000
      ]
    }
  ]
]
xytpbqjk

xytpbqjk2#

可以使用convert-csv-to-json npm包

npm i convert-csv-to-json

您的csv文件是rarities.csv,您必须为此再创建一个文件rarities_output.csv

csvToJson.generateJsonFileFromCsv(rarities.csv,rarities_output.csv);

有关详细信息,请阅读此官方文档convert-csv-to-json

相关问题