使用 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))
这将消除您遇到的两个问题:
您需要将 result
对象转换为字符串表示形式。如果您希望文件易于阅读,我建议使用 JSON.stringify(result, null,2)
,这会很好地缩进文件。请记住,如果结果对象很大并且输出将再次以编程方式使用,我建议不要使用缩进,因为它有 space 开销。
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));
那应该是异步的
我正在尝试使用 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))
这将消除您遇到的两个问题:
您需要将
result
对象转换为字符串表示形式。如果您希望文件易于阅读,我建议使用JSON.stringify(result, null,2)
,这会很好地缩进文件。请记住,如果结果对象很大并且输出将再次以编程方式使用,我建议不要使用缩进,因为它有 space 开销。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));
那应该是异步的