Node.js를 사용하여 JSON 파일로 데이터 쓰기 / 추가


199

루프 데이터의 노드를 사용하여 JSON 파일을 작성하려고합니다.

let jsonFile = require('jsonfile');

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

loop.json의 outPut은 다음과 같습니다.

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
      }
   ]
}

첫 번째로 만든 동일한 파일을 사용하고 싶지만 해당 코드를 실행할 때마다 새 요소가 동일한 파일에 추가되어야합니다.

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);
    }
});

답변:


388

이 json 파일이 시간이 지남에 따라 너무 커지지 않으면 다음을 시도해야합니다.

  1. 테이블 배열이 포함 된 자바 스크립트 객체를 만듭니다.

    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 
    }});

이것은 최대 100MB의 데이터에 효과적입니다. 이 한계를 초과하면 데이터베이스 엔진을 사용해야합니다.

최신 정보:

현재 날짜 (년 + 월 + 일)를 문자열로 반환하는 함수를 만듭니다. 이 문자열 + .json이라는 파일을 작성하십시오. fs 모듈에는 fs.stat (path, callback)라는 파일 존재를 확인할 수있는 기능이 있습니다. 이를 통해 파일이 존재하는지 확인할 수 있습니다. 존재하는 경우 읽기 기능이 없으면 작성 기능을 사용하십시오. 파일을 오늘 날짜 + .json으로 지정할 경로 cuz로 날짜 문자열을 사용하십시오. 콜백에는 stats 객체가 포함되며 파일이 없으면 null이됩니다.


1
답장을 보내 주셔서 감사합니다.하지만 오래된 파일이 있는지 확인한 다음 readlfile 코드를 실행하십시오. 이 코드가 실행될 때
Isoftmaster

1
D를 모두 지원하지만 난 fs.exists는 내 질문에 대답 업데이트 기능을 사용 : 내가 일하는 내 코드를 만들어 다시 한 번 감사합니다
Isoftmaster

또는 위 코드에 표시되지 않은 모든 복잡성을 래핑 하는 jsonfile Node 패키지를 사용할 수도 있습니다 .
Jeach

JSON 객체의 "테이블"또는 속성을 미리 알 수없는 경우는 어떻습니까?
oldboy

@kailniris 선생님은 각도 js의 로컬 json 파일에서 특정 노드를 어떻게 업데이트 할 수 있습니까? 예 : config.json 파일이 있는데 특정 노드를 업데이트하고 싶을 때 어떻게 할 수 있습니까?
theburningfire

25

다음 프로그램을 시도하십시오. 이 출력이 필요할 수 있습니다.

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');
    }
);

이 프로그램을 자바 스크립트 파일 (예 : square.js)로 저장하십시오.

그런 다음 명령을 사용하여 명령 프롬프트에서 프로그램을 실행하십시오. node square.js

그 기능은 명령을 실행할 때마다 기존 파일을 새로운 데이터 세트로 덮어 쓰는 것입니다.

행복한 코딩.


12

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;
  })
})

1
답장을 보내 주셔서 감사합니다.하지만 오래된 파일이 있는지 확인한 다음 readlfile 코드를 실행하십시오. 그렇지 않으면 writeFile 직접 실행하여 새 파일을 작성하십시오. 파일 이름에 현재 날짜가있는 매일 새 파일을 작성하고 새 데이터를 추가하고 싶습니다. 이 코드가 실행되는 오래된 파일 하루 종일
Isoftmaster

10

위의 예도 정확하지만 간단한 예를 제공합니다.

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");
});

8

시험

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

형식화를 위해 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);
});

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.