Как обновить значение в файле json и сохранить его через node.js

Как мне обновить значение в файле json и сохранить его через node.js? У меня есть содержимое файла:

var file_content = fs.readFileSync(filename);
var content = JSON.parse(file_content);
var val1 = content.val1;

Теперь я хочу изменить значениеval1 и сохраните его в файл.

Ответы на вопрос(2)

Делать это асинхронно довольно легко. Это особенно полезно, если вас беспокоит блокировка потока (вероятно).

var fs = require('fs');
var fileName = './file.json';
var file = require(fileName);

file.key = "new value";

fs.writeFile(fileName, JSON.stringify(file), function (err) {
  if (err) return console.log(err);
  console.log(JSON.stringify(file));
  console.log('writing to ' + fileName);
});

Предостережение заключается в том, что json записывается в файл в одну строку, а не предварительно проверяется. например:

{
  "key": "value"
}

будет...

{"key": "value"}

Чтобы избежать этого, просто добавьте эти два дополнительных аргумента вJSON.stringify

JSON.stringify(file, null, 2)

null - представляет функцию заменителя. (в этом случае мы не хотим изменять процесс)

2 - представляет пробелы для отступа.

//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));
 31 окт. 2018 г., 20:05
Я строю инструмент командной строки узла. Если он не записан синхронно, файл может быть заблокирован, когда выходные данные моего инструмента будут привязаны к следующему инструменту. Есть очень веские причины использовать синхронизацию. И веские причины использовать async.
 11 апр. 2015 г., 13:19
Поскольку узел основан на цикле, асинхронность почти всегда лучше, так что вы не блокируете цикл, это совсем не реакция коленного рефлекса, просто стандартная практика для узла Dev. Я уже говорил, что это зависит от требования, и я не думаю, что Q что-нибудь говорит о командной строке? Кроме того, в общем, если это часть большего набора кода (не разъясненного OP), то обработка ошибок всегда является разумной и лучшей практикой. Создание дампов стека хорошо для разработчиков, но дерьмо для всех остальных.
 11 апр. 2015 г., 04:30
Асинхронизация против синхронизации зависит именно от того, что вы делаете в каком контексте. Если это в сетевом сервисе, вам нужна асинхронность. Для утилиты командной строки синхронизация - это подходящая парадигма в большинстве простых случаев, но просто толчок, говорящий «async лучше». не является правильным. Мой фрагмент основан на фрагменте OP для контекста. Вопрос также не в обработке ошибок, и в случае сбоя записи в файл выход с трассировкой стека является разумным поведением по умолчанию, поскольку вы не можете многое сделать для его восстановления.
 11 апр. 2015 г., 16:02
Async - это метод параллелизма. Если вам нужен параллелизм, для правильной работы узла требуется асинхронность (не «лучше»). Если у вас нет параллелизма, вам не нужна асинхронность. Суть в том, что вам нужно понять, что асинхронность делает для вас и почему Это по сути не "лучше" без какой-либо причины, и вам не нужно запоминать его как «лучшую практику». Если OP пишет утилиту командной строки для изменения файла JSON, а затем завершается, async усложняет код без всякой причины, так как параллелизм не требуется.
 22 мая 2012 г., 12:50
В целом, было бы лучше использовать асинхронную запись, так как это является основным направлением работы Node. Конечно, не видя окружающего кода, было бы трудно дать однозначный ответ. Маловероятно, что вам действительно понадобится синхронизация, если вы не должны быть абсолютно уверены, что ничего не может произойти, пока запись не будет завершена. Кроме того, конечно, это должно иметь проверку ошибок, так как вы НИКОГДА не можете быть уверены, что запись в файл будет успешной.

Ваш ответ на вопрос