我想做两件事:
我想从现有对象创建新的对象数组,
并增加对象,以便每个对象可以具有1,2,3等的计数ID
我的问题是,当我写入文件时,它仅向文件写入1个随机对象,其余对象不显示。会有这样的错误,并且所有对象都具有相同的增量值。请解释我做错了。谢谢。
{
"users":[
{
"name":"mike",
"category":[
{
"title":"cook",
}
],
"store":{
"location":"uptown",
"city":"ulis"
},
"account":{
"type":"regular",
"payment":[
"active":false
]
}
}
]
}
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')
}
})
})
答案 0 :(得分:1)
这里有很多问题:
fs.writeFile()
重写了整个文件。它不会追加到文件中。此外,您也不能附加到JSON格式。因此,此代码仅会将每个对象写入一个文件。newObject
。numincrement
在循环内,因此在每次循环调用时它将具有相同的值。您也可以只使用传递给index
回调的forEach()
参数,而不使用您自己的变量。users
数组,那么您可能需要遍历appData.users
,而不仅仅是appData
。如果您真的只想将数据追加到文本文件中,则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");
}
});