将一个新对象添加到JSON文件中的数组中

4

我该如何向一个包含一组对象的现有JSON文件中添加另一个对象?

这是我的JS代码:

const fs = require("fs");

let Human = { 
    Name: "John",
    age: 20,

};

Human = JSON.stringify(Human, null, 2)

fs.appendFile('users.json', Human, error);

function error(err) {
    console.log("1");
}

这将产生输出:
[
    {
      "Name": "John",
      "age": 20,
    },
    
    {
      "Name": "John",
      "age": 20,
    }
]{
  "Name": "John",
  "age": 20,

}

但我需要:

[
    {
      "Name": "John",
      "age": 20,
    },
    
    {
      "Name": "John",
      "age": 20,
    },
    {
      "Name": "John",
      "age": 20,

    }
]

如何使它正确地写入数组?


欢迎来到SO!请不要试图通过垃圾邮件绕过质量过滤器 - 它存在是有原因的。将您的JSON文件解析为JS数组,使用Array#push添加新条目,然后重新将对象转换为JSON并转储回文件。 - ggorlen
@ggorlen 类型错误:无法读取未定义的属性“push”。 - peromi6801
@ggorlen 我需要在 [] 中放什么? - peromi6801
1个回答

4

将预先序列化为JSON格式的元素附加到现有的JSON文件中具有直观意义。您可以尝试从文件中截取尾部的"]",使用前缀逗号写入新元素,然后重新附加"]"

但是,这种方法可能会出现多种问题。更好的方法是读取文件,将JSON解析为JS对象,对对象进行所需的修改,将对象重新序列化为JSON,最后将字符串写回文件。

此代码展示了所有这些步骤以及初始写入生成示例数据:

const fs = require("fs").promises;

(async () => {
  // generate a sample JSON file
  const filename = "users.json";
  let users = [
    {
      name: "Amy",
      age: 21,
    },
    {
      name: "Bob",
      age: 23,
    },
  ];
  await fs.writeFile(filename, JSON.stringify(users));

  // append a new user to the JSON file
  const user = {
    name: "John",
    age: 20,
  };
  const file = await fs.readFile(filename);
  users = JSON.parse(file);
  users.push(user);
  await fs.writeFile(filename, JSON.stringify(users, null, 4));
})();

你展示了如何添加一个用户,我能否像{name:a},{name:b}这样一次性添加两个用户到数组中吗?只有第一个用户被添加了。 - Timo
1
可以这样写:users.push({name: a}); users.push({name: b}); 或者直接调用 .push 多次。 - ggorlen
第一个不会做到,但第二个可以使用多个push。 - Timo
1
你可能在做错某些事情。.push()可接受多个参数a = []; a.push(1, 2, 3); console.log(a); 输出 [1, 2, 3] - ggorlen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接