Как сохранить и прочитать данные из JSON - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь сохранить миллион данных в файл JSON в моем приложении NodeJS.Основная идея состоит в том, чтобы сохранить сетку размером 1000x1000 пикселей в виде массива с позицией x, y и идентификатором цвета, чтобы каждый пиксель имел координату и цвет.Мой реальный код для генерации примера:

Итак, у меня есть функция для генерации данных, и с помощью fs.writeFile () я могу сохранить ее.

//resetPos('test.json');
function resetPos(path) {
    let data = [];
    for (let y = 1; y <= 1000; y++){
        data.push([]);
    }
    data.forEach(function(e, i){
        for (let x = 1; x <= 1000; x++) {
            e.push([
                "x": x,
                "y": i,
                "color": "#cccccc"
            ]);
        }
    });
    fs.writeFile(path, JSON.stringify(data), function(err){
        if(err) throw err;
    });
    console.log(data);
}
let global_data = fs.readFileSync("test.json");
console.log(global_data[0]);

Когда я читаю файл, онпоказывает "91".Я пытался использовать .toJSON () и .toString (), но не пошел, как я хочу.Я ищу получить координаты X, Y в качестве данных [Y] [X];

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

В принципе, есть два способа прочитать файл .json в Node.js.

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

const packageJson = require('./package.json');

Преимущество этого подхода заключается в том, что вы возвращаете содержимое файла .json в виде объекта или массива JavaScript, уже проанализированного.Недостаток этого подхода заключается в том, что вы не можете перезагрузить файл в текущем процессе, если что-то изменилось, поскольку require кэширует содержимое любого загруженного файла, и вам всегда возвращается кэшированное значение.

Ваш второй вариант с точностью до наоборот: он позволяет вам перезагружать вещи, но требует, чтобы вы анализировали файл самостоятельно.Для этого вы используете функцию readFile модуля fs:

const fs = require('fs');

fs.readFile('./package.json', { encoding: 'utf8' }, (err, data) => {
  const packageJson = JSON.parse(data);

  // ...
});

Если вы хотите использовать async и await и если вы используете функцию util.promisify Node.jsВы также можете написать это синхронно, но сохранить асинхронный код:

const fs = require('fs'),
      { promisify } = require('util');

const readFile = promisify(fs.readFile);

(async () => {
  const data = await readFile('./package.json', { encoding: 'utf8' });
  const packageJson = JSON.parse(data);

  // ...
})();

Кроме этого, есть также функция fs.readFileSync, которая работает синхронно, но вы должны остатьсяв отличие от этого по соображениям производительности вашего программного обеспечения.

Для записи файла JSON единственный вариант - использовать функцию writeFile модуля fs, которая в основном работает так же, как и readFile counterpart:

const fs = require('fs');

const packageJson = { /* ... */ };
const data = JSON.parse(packageJson);

fs.writeFile('./package.json', data, { encoding: 'utf8' }, err => {
  // ...
});

Опять же, вы можете использовать функцию util.promisify, как указано выше, чтобы заставить вещи работать с async и await, или вы можете использовать синхронную функцию fs.writeFileSync (котораяопять же я бы не советовал).

0 голосов
/ 11 февраля 2019

Обычно вы можете читать в JSON-файле с помощью метода require узла.

Пример: const myJSON = requrie('./file.json') myJSON будет хранить данные JSON из file.json как обычный объект Javascript.

Вы можете написать файл JSON самостоятельно, используя:

const fs = require('fs'); 
fs.writeFile('file.json', json, 'utf8', callback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...