Добавление данных JSON в файл - PullRequest
0 голосов
/ 28 мая 2018


У меня есть некоторые данные, которые я хочу периодически записывать в файл, и я хотел бы записать в него небольшие объекты JSON.Позже я хотел бы прочитать их все для обработки, но добавленный файл объектов JSON не является самим JSON.

Поэтому я структурирую объект JSON и периодически записываю их в файл, и получаючто-то вроде этого;

{
    "100": {
        "stuff": 123
    }
}
{
    "300": {
        "stuff": 456
    }
}
{
    "200": {
        "stuff": 789
    }
}

Конечно, когда я пытаюсь проанализировать файл с помощью простого скрипта, подобного следующему:

var fs = require('fs');

var file = 'test.log'

var obj = JSON.parse(fs.readFileSync(file, 'utf8'));

var fs = require('fs');
var obj;
fs.readFile(file, 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
  console.log(obj);
});

... анализатор сходит с ума, потому что это не 'Для правильного файла JSON мне понадобится что-то вроде:

{
    "100": {
        "stuff": 123
    },
    "300": {
        "stuff": 456
    },
    "200": {
        "stuff": 789
    }
}

... но я не могу получить это, просто добавляя записи.Я, конечно, могу перед запуском вводить запятые между записями, но в итоге я пропускаю '{' в начале файла, '}' в конце файла и получаю дополнительные ',' на последнемзапись.Все это говорит о том, что я являюсь клуджем.

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

Если вы могли бы указатьЯ был бы признателен за хорошее решение для этого.

С уважением, Павел.

1 Ответ

0 голосов
/ 28 мая 2018

Почему бы вам не использовать регулярное выражение перед обработкой файла списка объектов, чтобы добавить запятую.Поскольку шаблон представляет собой новую строку после каждого объекта, вы можете использовать это, чтобы найти и заменить: /}\n{/g.

Для вашего примера это должно сработать:

var fs = require('fs');

var file = 'test.log'
var obj;

fs.readFile(file, 'utf8', function (err, data) {
  if (err) throw err;
  
  var jsonString = '[' + data.replace(/}\n{/g, '},{')+ ']'; // Adding brackets in order to create an array of objects
  
  obj = JSON.parse(jsonString);
  console.log(obj);
});

Затем, если вы хотите, чтобы объект был указан, вы можете использовать оператор распространения ..., чтобы добавить объект к вашему суперобъекту:

var fs = require('fs');

var file = 'test.log'
var obj;

fs.readFile(file, 'utf8', function (err, data) {
  if (err) throw err;

  var jsonString = '[' + data.replace(/}\n{/g, '},{')+ ']'; // Adding brackets in order to creat an array of objects

  obj = JSON.parse(jsonString);

  var superObj = {};

  for (var i = 0; i < obj.length; i++) {
      superObj = {...superObj,...obj[i]};
  }

  console.log(superObj);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...