我正在尝试使用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)
})
答案 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))
这将消除您遇到的两个问题:
您需要将result
对象转换为字符串表示形式。如果你希望文件是人类可读的,我建议,JSON.stringify(result, null,2)
,这将很好地缩进文件。请记住,如果结果对象很大并且输出再次以编程方式消耗,我建议省略缩进,因为它有空间开销。
writeFileSync
将确保您的程序流程不会继续,直到文件写入操作完成。