我想做两件事:
我想从现有对象创建一个新的对象数组,
并增加对象,以便每个对象的计数 ID 为 1、2、3 等
我的问题是,当我写入文件时,它仅将 1 个随机对象写入文件,其余的不显示。存在如此多的错误,并且所有对象都有相同的增量值。请解释我做错了什么。谢谢。
代码:
data.json:
{
"users":[
{
"name":"mike",
"category":[
{
"title":"cook",
}
],
"store":{
"location":"uptown",
"city":"ulis"
},
"account":{
"type":"regular",
"payment":[
"active":false
]
}
}
]
}
index.js:
const appData = ('./data.json')
const fs = require('fs');
let newObject = {}
appData.forEach(function(items){
let x = items
let numincrement = 1++
newObject.name = x.name
newObject.count = numincrement
newObject.categories = x.categories
newObject.store = x.store
newObject.account = x.account
fs.writeFile('./temp.json', JSON.stringify(newObject, null, 2),'utf8' , function(err, data) {
// console.log(data)
if(err) {
console.log(err)
return
} else{
console.log('created')
}
})
})
最佳答案
这里有一大堆问题:
- 您只是将同一个对象一遍又一遍地重写到文件中。
fs.writeFile()
重写整个文件。它不会附加到文件中。此外,您也无法附加到 JSON 格式。因此,这段代码只会每次向文件写入一个对象。 - 要将新的 JSON 数据附加到现有文件中的内容,您必须读取现有的 JSON,解析它以将其转换为 Javascript 数组,然后将新项目添加到数组中,然后转换回 JSON 并写入再次输出文件。为了更有效地附加,您需要不同的数据格式(可能是逗号分隔行)。
- 你的循环有各种各样的问题。您一次又一次地分配给同一个
newObject
。 - 您的
numincrement
位于循环内部,因此每次调用循环时它都会具有相同的值。您还可以只使用传递给forEach()
回调的index
参数,而不是使用您自己的变量。 - 如果您尝试迭代的是数据中的
users
数组,那么您可能需要迭代appData.users
,而不仅仅是应用程序数据
。
如果您确实只想将数据附加到文本文件,那么 JSON 并不是最容易使用的格式。仅使用逗号分隔行可能会更容易。然后,您可以将新行添加到文件中。使用 JSON 确实无法做到这一点。
<小时/>如果您愿意用当前数据覆盖文件,您可以执行以下操作:
const appData = ('./data.json').users;
const fs = require('fs');
// create an array of custom objects
let newData = appData.map((item, index) => {
return {
name: item.name,
count: index + 1,
categories: item.categoies,
store: item.store,
account: item.account
};
});
// write out that data to a file as JSON (overwriting existing file)
fs.writeFile('./temp.json', JSON.stringify(newData, null, 2),'utf8' , function(err, data) {
if (err) {
console.log(err);
} else {
console.log("data written");
}
});
关于javascript - 创建新对象并使用 fs.writeFile() 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711269/