繁体   English   中英

创建新对象并使用fs.writeFile()写入文件

[英]Create new object and write to file with fs.writeFile()

我想做两件事:

我想从现有对象创建对象的新数组,

并增加对象,以便每个对象可以具有1,2,3等的计数ID

我的问题是,当我写入文件时,它只向该文件写入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')
            }
          })
    })

这里有很多问题:

  1. 您只是一次又一次地将同一对象重写到文件中。 fs.writeFile()重写整个文件。 它不会追加到文件中。 此外,您也不能附加到JSON格式。 因此,此代码只会将每个对象写入一个文件。
  2. 要将新的JSON数据附加到现有文件中,您必须读取现有的JSON,对其进行解析以将其转换为Javascript数组,然后将新项目添加到该数组中,然后再转换回JSON并写出该文件再次。 为了更有效地附加,您将需要不同的数据格式(也许用逗号分隔的行)。
  3. 您的循环有各种各样的问题。 您一次又一次地将相同的newObject分配。
  4. 您的numincrement在循环内部,因此在每次循环调用时它将具有相同的值。 您也可以只使用传递给forEach()回调的index参数,而不使用您自己的变量。
  5. 如果您要迭代的是数据中的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");
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM