使用Nodejs writeFile清空JSON

时间:2018-04-08 17:09:21

标签: javascript json node.js 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)

})

2 个答案:

答案 0 :(得分:2)

您的问题是:

的组合
let result = []

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

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

let result = {}

除此之外你需要写:

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

答案 1 :(得分:0)

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

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

  1. 您需要将result对象转换为字符串表示形式。如果你希望文件是人类可读的,我建议,JSON.stringify(result, null,2),这将很好地缩进文件。请记住,如果结果对象很大并且输出再次以编程方式消耗,我建议省略缩进,因为它有空间开销。

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