在NodeJS和DiscordJS中编辑JSON文件

时间:2020-09-23 10:05:16

标签: javascript node.js json discord.js

对,所以我想把头放在编辑(附加数据)到JSON文件上。 文件(users.json)如下所示:

{
  "users": {
    "id": "0123456789",
    "name": "GeirAndersen"
  }
}

现在,我想将用户添加到此文件,并保留格式,这似乎是我无法理解的地方。我已经花了很多时间尝试,阅读,再试一次……但是无论如何,我都无法获得想要的结果。

在我的.js文件中,我像这样从json文件中获取数据:

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

let data = await fs.readFile('./test.json', 'utf-8');
let users = JSON.parse(data);

console.log(JSON.stringify(users.users, null, 2));

此控制台日志显示应有的内容:

{
  "id": "0123456789",
  "name": "GeirAndersen"
}

为了测试,我直接在代码中定义了一个新用户,如下所示:

let newUser = {
  "id": '852852852',
  "name": 'GeirTrippleAlt'
};
console.log(JSON.stringify(newUser, null, 2));

此控制台日志还显示如下数据:

{
  "id": "852852852",
  "name": "GeirTrippleAlt"
}

到目前为止,一切都很好,但是现在我想将最后一个加入到users.users中,我只是想不出如何正确地做到这一点。我已经尝试了很多版本和迭代,但我记不清全部。 上次尝试:

users.users += newUser;
users.users = JSON.parse(JSON.stringify(users.users, null, 2));

console.log(JSON.parse(JSON.stringify(users.users, null, 2)));
console.log(users.users);

这两个控制台都记录相同的内容:

[object Object][object Object]

我想要实现的是:我想结束:

{
  "users": {
    "id": "0123456789",
    "name": "GeirAndersen"
  },
  {
    "id": "852852852",
    "name": "GeirTrippleAlt"
  }
}

到此为止,我将写回.json文件,但这不是问题。

1 个答案:

答案 0 :(得分:1)

这实际上不是有效的数据结构,因为您试图将另一个对象添加到一个对象而不给该值一个key

我认为您真正想要的是让“用户”成为一系列用户。

{
  "users": [
    {
      "id": "0123456789",
      "name": "GeirAndersen"
    },
    {
      "id": "852852852",
      "name": "GeirTrippleAlt"
    }
  ]
}

您可以轻松地在JS中创建一个数组,并将push()个新项添加到您的数组中。您JSON.stringify()没问题。

const myValue = {
  users: []
};

const newUser = {
  'id': '0123456789',
  'name': "GeirAndersen'
};

myValue.users.push(newUser);

const strigified = JSON.stringify(myValue);