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

标签 javascript arrays node.js object fs

我想做两件事:

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

并增加对象,以便每个对象的计数 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')
            }
          })
    })

最佳答案

这里有一大堆问题:

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

相关文章:

Java 2D 数组填充 - 无辜的优化导致严重的减速

android - 在 Rails 中处理来自 Android 的 JSON 数组

node.js - 循环退出时 Node https 回调不触发

javascript - ES6 : How to store the object inside this class?

javascript - 设置 bcrypt 以与 Passport 和 async-await Node.js 库配合使用

python - 使用数组选择轴形成多维数组

javascript - 为什么 ({}+{}) ="[object Object][object Object]"?

javascript - Passport.js github 策略回调总是返回 "TypeError: Cannot set property ' 未定义的用户”

JavaScript 减去零更改结果

javascript - 如何在SPA应用中开发登录/注册