Я ужасно объясняю словами, поэтому я покажу и объясню, что происходит, и то, что я хотел бы иметь, как можно яснее.
Текущий код в node.js: - Это открывает и перезаписывает файл.json, это работает правильно, насколько это хорошо.
fs.open(fileName, "r", function(err, fd) {
if(!err) {
let file = require(fileName);
if(!file.created) {
file.created = {};
file.created.timestamp = "123456789";
let member_id = "456";
file.member_id = {};
file.member_id.text = "hello!";
}
fs.writeFile(fileName, JSON.stringify(file, null, "\t"), function (err) {
if(err) return console.log(err);
console.log("added to " + fileName);
});
return;
}
else
return console.log("woops, something went wrong.....");
});
Содержимое файла.json:
{
"created": {
"timestamp": "123456789"
},
"member_id": {
"text": "hello!"
}
}
Таким образом, это открытие и перезапись файла.json должным образом. Это здорово. Проблема с этим; он добавляет ключ с именем "member_id"
, в то время как я хочу, чтобы он был "456"
(см. пример ниже, я добавил комментарий//с указателем <---, указывающим его)
Содержание того, как я хотел бы использовать файл.json:
{
"created": {
"timestamp": "123456789"
},
"456": { // < ---------------------
"text": "hello!"
}
}
Как я могу сделать это возможным? Кажется, я не могу понять это вообще...
Измените это:
file.member_id = {};
file.member_id.text = "hello!";
к этому:
file[member_id] = {};
file[member_id].text = "hello!";
И любые другие ссылки на это же свойство.
Если вы хотите использовать имя переменной как имя свойства, вы должны ссылаться на нее с синтаксисом скобки. file.member_id
просто означает ссылку на свойство с именем member_id
как вы можете видеть в текущем результате. Поместив его в скобки, как в file[member_id]
интерпретирует интерпретатор для получения содержимого переменной member_id
и использует его как имя свойства.
Создайте такие данные:
if(!file.created) {
file.created = {};
file.created.timestamp = "123456789";
let member_id = "456";
file[member_id] = {};
file[member_id].text = "hello!";
}