fs.writeFileSync를 사용하여 JSON 파일에 JSON 객체 쓰기


116

JSON 개체를 JSON 파일에 쓰려고합니다. 코드는 오류없이 실행되지만 객체의 내용이 기록 된 대신 JSON 파일에 기록되는 모든 내용은 다음과 같습니다.

[object Object]

이것은 실제로 작성하는 코드입니다.

fs.writeFileSync('../data/phraseFreqs.json', output)

'출력'은 JSON 개체이며 파일이 이미 있습니다. 더 많은 정보가 필요하면 알려주세요.


11
fs.writeFileSync ( '../ data / phraseFreqs.json', JSON.stringify (output))
Daniel

답변:


169

개체를 문자열 화해야합니다.

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output));

2
SO에 오신 것을 환영합니다. 질문에 답하기 전에 기존 답변을 검토해보세요. 귀하의 답변이 이미 제안 된 경우 대신 해당 답변을 찬성합니다. 좋은 답변을 작성 하려면 커뮤니티 가이드 를 참조하세요 .
LightBender

44
나는 이것이 동기 작업과 비동기 작업을 사용할지 여부에 대한 의견없이 질문에 대답하는 것을 좋아합니다.
Brian Duncan

1
가독성을 위해 JSON.stringify 메소드의 space 매개 변수를 사용할 수 있습니다. fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));더보기 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Binh

48

동기식 접근 방식을 사용해야한다고 생각하지 않습니다. 비동기식으로 파일에 데이터를 쓰는 output것이 object.

참고 : output문자열 인 경우 인코딩을 지정하고 flag옵션도 기억하십시오 . :

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFile('/tmp/phraseFreqs.json', content, 'utf8', function (err) {
    if (err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 

파일에 데이터를 쓰는 동기 방식을 추가했지만 사용 사례를 고려하십시오. 비동기 실행과 동기 실행, 이것이 실제로 무엇을 의미합니까?

const fs = require('fs');
const content = JSON.stringify(output);

fs.writeFileSync('/tmp/phraseFreqs.json', content);

9
짧은 스크립트 등으로 수행되는 경우 동기식이 좋습니다. 서버 요청의 일부인 경우 비동기식이어야합니다.
Hilton Shumway

1
반드시 I / O 바인딩 된 프로세스는 비동기식으로 만들어야하지만 짧은 스크립트 복잡성에 따라 동기식으로 선택할 수 있습니다.
akinjide

4
이것은 질문에 대한 답이 아닙니다.
Stephan Bijzitter 2018 년

6
사용자는 특히 동기 방법을 요구
앤서니

7
async good이라고 말하지 마세요. 그리고 동기화 불량을 의미합니다. 속도가 걱정된다면 웹팩이 최적화를 수행해야합니다. 당신은 옵티마이 저가 아닙니다. 이유 : json 명령 줄 도구에 동기화 파일 쓰기가 필요합니다. 데이터를 체인의 다음 앱으로 파이핑하기 전에 열려있는 모든 파일을 닫아야합니다.
TamusJRoyce 2018

27

세 번째 인수를 전달하여 json을 사람이 읽을 수 있도록 만듭니다 stringify.

fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 4));

1

웹 서버로 데이터를 보낼 때 데이터는 문자열이어야합니다 ( 여기 ). 를 사용하여 JavaScript 객체를 문자열로 변환 할 수 있습니다 JSON.stringify(). 다음 은 작동하는 예입니다.

var fs = require('fs');

var originalNote = {
  title: 'Meeting',
  description: 'Meeting John Doe at 10:30 am'
};

var originalNoteString = JSON.stringify(originalNote);

fs.writeFileSync('notes.json', originalNoteString);

var noteString = fs.readFileSync('notes.json');

var note = JSON.parse(noteString);

console.log(`TITLE: ${note.title} DESCRIPTION: ${note.description}`);

도움이되기를 바랍니다.


1

다음 fs은 promise를 사용 하는 버전을 사용하는 변형입니다 .

const fs = require('fs');

await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.