使用 Nodejs writeFile 清空 JSON

Empty JSON with Nodejs writeFile

我正在尝试使用 NodeJS 写入 JSON 文件。写完后,我在使用节点的 writeFile 函数时有一个空的 JSON 文件。当我 console.log 我的终端中的所有数据都是正确的。

const fs = require('fs')
const path = require('path')

fs.readFile('items.csv', 'utf-8', (err,data) => {

  let lines = data.split('\n')

  let result = []

  let headers = lines[0].split(',')

  const noClass = 'NoClass'
  result[noClass] = 0

  for(var i = 1; i < lines.length; i++) {

    let currentLine = lines[i].split(',')

    if(currentLine[2] === '' || currentLine[2] === undefined) {
      result[noClass]++
    } else {
      let merchandiseHierarchy = currentLine[2].split(' : ')

      let subClass = merchandiseHierarchy[2]

      if(!result[subClass]) {
        result[subClass] = 0
      }
      result[subClass]++
    }

  }

  console.log(result)
  fs.writeFile('items.json', result)

})

您应该将写入文件代码更改为,fs.writeFileSync('items.json',JSON.stringify(result))

这将消除您遇到的两个问题:

  1. 您需要将 result 对象转换为字符串表示形式。如果您希望文件易于阅读,我建议使用 JSON.stringify(result, null,2),这会很好地缩进文件。请记住,如果结果对象很大并且输出将再次以编程方式使用,我建议不要使用缩进,因为它有 space 开销。

  2. writeFileSync 将确保您的程序流在文件写入操作完成之前不会继续。

您的问题是以下组合:

let result = []

const noClass = 'NoClass'
result[noClass] = 0

数组 [] 没有保存为 JSON 时将被序列化的属性。 如果要使用具有属性的对象,则它必须是:

let result = {}

除此之外你还需要写:

fs.writeFile('items.json', JSON.stringify(result))

这个fs.writeFile('items.json', result) 永远行不通。 fs.writeFile 接受 3 - 4 个参数,你的结果必须使用 JSON.stringify() 转换为字符串,然后将你的结果传递到括号

尝试

fs.writeFile('items.json', JSON.stringify(结果), "utf8", (err) => console.log(err));

那应该是异步的