Есть файл JSON на сервере с массивом объектов и хотите отправить в него объект с помощью fs.appendFile

#javascript #node.js #json

#javascript #node.js #json

Вопрос:

У меня есть этот JSON на сервере: [{"a":1}, {"a":2}] и интересно, есть ли возможность добавить объект в конце, вместо этого, если переписать весь файл на сервере. Я нашел обходной путь, убрал скобки и добавил их после загрузки с сервера.

 newObj=  {'a':3};  
fs.appendFile(theServerFile, ','   newObj, ...) ;
  

Комментарии:

1. Одним словом, нет. весь JSON должен быть прочитан, проанализирован, обновлен и записан обратно в файл. Выполнение в противном случае, скорее всего, приведет к недопустимому JSON

2. Редактирование данных JSON в строке — крайне плохая идея.

3. Не говоря уже о ваших проблемах с блокировкой файлов.

Ответ №1:

Я бы сделал следующее:

     const fs = require('fs');

    fs.readFile('./jsonFile.html', function read(err, data) {
        if (err) {
             throw err;
        }

        processFile( JSON.parse(data) );        
     });

     function processFile(data) {
         data.push(newObj);
         fs.writeFileSync('./jsonFile.html', data);
     }
  

Извлеките текущее содержимое, обновите его и запишите заново.

Надеюсь, это поможет!

Комментарии:

1. в вашем ответе есть две проблемы: 1. вы должны проанализировать данные файла в объект JSON перед обработкой. 2. если вы добавите данные к исходному файлу подобным образом, это добавит второй набор данных к исходному файлу

2. Ваш код добавляет обновленный JSON в файл, а не перезаписывает его

3. что ж, теперь вы не ответили на первоначальный вопрос об использовании fs.appendFile 🙂