Node.js - Файловая система - использование переменной в fs.writeFile ()

1

Я ужасно объясняю словами, поэтому я покажу и объясню, что происходит, и то, что я хотел бы иметь, как можно яснее.


Текущий код в 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!"
    }
}

Как я могу сделать это возможным? Кажется, я не могу понять это вообще...

Теги:
fs

2 ответа

1
Лучший ответ

Измените это:

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 и использует его как имя свойства.

  • 0
    Это на самом деле так волнующе, я думаю, что я пробовал это, но, очевидно, я не сделал или сделал это неправильно, я застрял на этом на некоторое время, большое спасибо!
0

Создайте такие данные:

if(!file.created) {
    file.created            = {};
    file.created.timestamp  = "123456789";

    let member_id = "456";

    file[member_id]      = {};
    file[member_id].text = "hello!";
}
  • 0
    Это на самом деле так волнующе, я думаю, что я пробовал это, но, очевидно, я не сделал или сделал это неправильно, я застрял на этом на некоторое время, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню