allishappy
@allishappy

Как автоматически перезаписывать JSON?

Есть некий JSON-файл file.json. Я его подключаю и изменяю значение одного поля:
const file = require('./file.json');
file.text = 'text';

Если я остановлю скрипт и открою file.json, то поле text останется прежним, разумеется. Можно как-то сделать так, чтобы после file.text = 'text'; автоматически перезаписывался и сам файл?

З.Ы. Я знаю, что можно просто после каждого изменения перезаписывать файл с помощью модуля fs, но, может, есть способ легче?
  • Вопрос задан
  • 926 просмотров
Решения вопроса 3
vitali1995
@vitali1995
Не знаю готовых решений, но если ничего не найдётся, можно смотреть в сторону сеттеров (es6), где после каждого присвоения вызывать сохранение файла. В этом случае придётся переписать процесс считывания, чтобы навешивать сеттер на каждое прочитанное свойство.

https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
@yogurt1
class AutoSaveJSON {
    constructor(path) {
        this.data = require(path);
    }

    save() {
        fs.writeFile(path, JSON.stringify(this.data), err => console.dir(err, {colors: true})
    }

    set(key, value) {
        this.data[key] = value;
        this.save()
    }

    get(key) {
        return this.data[key]
    }
}

const json = new AutoSaveJSON('./some_data.json')
json.set('key', 'value')
json.get('key') === 'value'
Ответ написан
abyrkov
@abyrkov
JavaScripter
Советую посмотреть на Proxy из ES6. Там все легче легкого:
1. Создаем прокси с перехватом [[SET]].
2. ???
3. PROFIT!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@private_tm
JAVA dev
//change the value in the in-memory object
content.val1 = 42;
//Serialize as JSON and Write it to a file
fs.writeFileSync(filename, JSON.stringify(content));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы