Подтвердить что ты не робот

Запись/добавление данных в файл JSON с использованием Node.js

Я пытаюсь записать файл JSON, используя данные узла из цикла, например:

let jsonFile = require('jsonfile');

for (i = 0; i < 11; i++) {
    jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}

outPut в loop.json:

id :1 square : 1

но мне нужен выходной файл, подобный этому (ниже), а также, если я снова запускаю этот код, он должен добавить этот новый вывод как элементы в тот же существующий файл JSON:

{
   "table":[
      {
         "Id ":1,
         "square ":1
      },
      {
         "Id ":2,
         "square ":3
      },
      {
         "Id ":3,
         "square ":9
      },
      {
         "Id ":4,
         "square ":16
      },
      {
         "Id ":5,
         "square ":25
      },
      {
         "Id ":6,
         "square ":36
      },
      {
         "Id ":7,
         "square ":49
      },
      {
         "Id ":8,
         "square ":64
      },
      {
         "Id ":9,
         "square ":81
      },
      {
         "Id ":10,
         "square ":100
      }
   ]
}

Я хочу использовать тот же файл, который я создал 1 раз, но всякий раз, когда я запускаю этот код, новые элементы должны добавляться в тот же файл

const fs = require('fs');

let obj = {
    table: []
};

fs.exists('myjsonfile.json', function(exists) {

    if (exists) {

        console.log("yes file exists");

        fs.readFile('myjsonfile.json', function readFileCallback(err, data) {

            if (err) {
                console.log(err);
            } else {
                obj = JSON.parse(data);

                for (i = 0; i < 5; i++) {
                    obj.table.push({
                        id: i,
                        square: i * i
                    });
                }

                let json = JSON.stringify(obj);
                fs.writeFile('myjsonfile.json', json);
            }
        });
    } else {

        console.log("file not exists");

        for (i = 0; i < 5; i++) {
            obj.table.push({
                id: i,
                square: i * i
            });
        }

        let json = JSON.stringify(obj);
        fs.writeFile('myjsonfile.json', json);
    }
});
4b9b3361

Ответ 1

Если этот файл json со временем не станет слишком большим, попробуйте:

  1. Создайте объект javascript с массивом таблиц в нем

    var obj = {
       table: []
    };
    
  2. Добавить некоторые данные к нему, как

    obj.table.push({id: 1, square:2});
    
  3. Преобразовать его из объекта в строку с помощью stringify

    var json = JSON.stringify(obj);
    
  4. используйте fs для записи файла на диск

    var fs = require('fs');
    fs.writeFile('myjsonfile.json', json, 'utf8', callback);
    
  5. если вы хотите добавить его, прочитайте файл json и конвертируйте его обратно в объект

    fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
        if (err){
            console.log(err);
        } else {
        obj = JSON.parse(data); //now it an object
        obj.table.push({id: 2, square:3}); //add some data
        json = JSON.stringify(obj); //convert it back to json
        fs.writeFile('myjsonfile.json', json, 'utf8', callback); // write it back 
    }});
    

Это будет эффективно работать для данных размером до 100 МБ. При превышении этого предела вы должны использовать ядро базы данных.

ОБНОВИТЬ:

Создайте функцию, которая возвращает текущую дату (год + месяц + день) в виде строки. Создайте файл с именем этой строки +.json. Модуль fs имеет функцию, которая может проверять существование файла с именем fs.stat (путь, обратный вызов). При этом вы можете проверить, существует ли файл. Если он существует, используйте функцию чтения, если нет, используйте функцию создания. Используйте строку даты в качестве пути, поскольку файл будет назван как сегодняшняя дата +.json. обратный вызов будет содержать объект статистики, который будет нулевым, если файл не существует.

Ответ 2

Пожалуйста, попробуйте следующую программу. Вы можете ожидать этого выхода.

var fs = require('fs');

var data = {}
data.table = []
for (i=0; i <26 ; i++){
   var obj = {
       id: i,
       square: i * i
   }
   data.table.push(obj)
}
fs.writeFile ("input.json", JSON.stringify(data), function(err) {
    if (err) throw err;
    console.log('complete');
    }
);

Сохраните эту программу в файле javascript, скажем, square.js.

Затем запустите программу из командной строки, используя команду node square.js

Что он делает, просто перезаписывая существующий файл с новым набором данных каждый раз, когда вы выполняете команду.

Счастливое кодирование.

Ответ 3

вы должны прочитать файл, каждый раз, когда вы хотите добавить новое свойство в json, а затем добавьте новые свойства

var fs = require('fs');
fs.readFile('data.json',function(err,content){
  if(err) throw err;
  var parseJson = JSON.parse(content);
  for (i=0; i <11 ; i++){
   parseJson.table.push({id:i, square:i*i})
  }
  fs.writeFile('data.json',JSON.stringify(parseJson),function(err){
    if(err) throw err;
  })
})

Ответ 4

Приведенный выше пример также верен, но я приведу простой пример:

var fs = require("fs");
var sampleObject = {
    name: 'pankaj',
    member: 'stack',
    type: {
        x: 11,
        y: 22
    }
};

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {
        console.error(err);
        return;
    };
    console.log("File has been created");
});

Ответ 5

Для форматирования jsonfile предоставляет параметр spaces который вы можете передать в качестве параметра:

   jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
         console.error(err);
   })

Или используйте jsonfile.spaces = 4. Подробности читайте здесь.

Я бы не советовал записывать в файл каждый раз в цикле, вместо этого создаю объект JSON в цикле и записываю в файл вне цикла.

var jsonfile = require('jsonfile');
var obj={
     'table':[]
    };

for (i=0; i <11 ; i++){
       obj.table.push({"id":i,"square":i*i});
}
jsonfile.writeFile('loop.json', obj, {spaces:2}, function(err){
      console.log(err);
});

Ответ 6

пытаться

var fs = require("fs");
var sampleObject = { your data };

fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
    if (err) {  console.error(err);  return; };
    console.log("File has been created");
});

Ответ 7

Для синхронного подхода

const fs = require('fs')
fs.writeFileSync('file.json', JSON.stringify(jsonVariable));

Ответ 8

Вы также можете импортировать и использовать этот открытый компонент компонент write-json-file.

Пример:

const writeJsonFile = require('bit/global/write-json-file');
const jsonFile = "/tmp/exampleFile.json";
writeJsonFile(jsonFile,{isThisReal:ture,author:amit}).catch(err => console.log(err));