【问题标题】:Empty JSON with Nodejs writeFile使用 Nodejs writeFile 的空 JSON
【发布时间】:2018-04-08 17:09:20
【问题描述】:

我正在尝试使用 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)

})

【问题讨论】:

  • 你忘了字符串化result
  • 当我将它字符串化时,数组变为空

标签: javascript json node.js writefile


【解决方案1】:

你的问题是:

let result = []

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

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

let result = {}

除此之外你还需要写:

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

【讨论】:

  • 其实这就是问题所在。我应该使用一个对象
【解决方案2】:

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

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

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

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

【讨论】:

  • 我仍然得到一个空数组
  • 发布实际文件的输出,如果用空数组表示[],则表示您的对象为空。
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2016-06-06
相关资源
最近更新 更多