node.js를 사용하여 JSON을 예쁘게 인쇄하려면 어떻게해야합니까?


436

이것은 해결 된 문제처럼 보이지만 해결책을 찾을 수 없습니다.

기본적으로 JSON 파일을 읽고 키를 변경하고 새 JSON을 동일한 파일로 다시 씁니다. 모든 것이 작동하지만 JSON 형식이 느슨합니다.

{
  name:'test',
  version:'1.0'
}

나는 얻다

{name:'test',version:'1.1'}

Node.js에서 올바른 형식의 JSON을 파일에 쓰는 방법이 있습니까?


JSON.stringify주기적 객체를 질식 util.inspect시키고 유효한 JSON을 생성하지 않습니다. : \ 나는 NodeJS 꽤 인쇄 JSON에는 [기본] 솔루션을 찾을 수 없습니다
ThorSummoner

@ThorSummoner : 이는 노드가 아닌 JSON의 문제입니다. JSON은 기본적으로 순환 참조를 지원하지 않습니다. 다른 질문에 해결책이 있습니다 .
Sasha Chedygov

답변:


814

JSON.stringify세 번째 매개 변수는 예쁜 인쇄를위한 공백 삽입을 정의합니다. 문자열 또는 숫자 (공백 수) 일 수 있습니다. 노드는로 파일 시스템에 쓸 수 있습니다 fs. 예:

var fs = require('fs');

fs.writeFile('test.json', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
     "a": 1,
     "b": 2,
     "c": 3,
}
*/

MDNJSON.stringify () 문서 , Node fs docs를 참조하십시오.


1
참고 : "\t"탭 대신 4를 사용 하십시오.
제레미 틸

최신 nodejs에서는 세 번째 매개 변수로 콜백 함수를 제공해야합니다. stackoverflow.com/a/11677276/675065
Alp

216

나는 이것이 유용 할 것이라고 생각한다 ... 나는 예제 코드를 좋아한다 :)

var fs = require('fs');

var myData = {
  name:'test',
  version:'1.0'
}

var outputFilename = '/tmp/my.json';

fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log("JSON saved to " + outputFilename);
    }
}); 

4
tmp폴더가 존재 하는지 확인하십시오 . 그렇지 않으면 실패 할 수 있습니다.
래리 배틀

2
대부분의 유닉스 시스템 (Mac 및 Linux 포함. BSD를 기억하면)에는 tmp폴더가 기본적으로 존재합니다
Antony

윈도우의 경우 제공되는 위치 (출력 파일 이름)는 무엇입니까
Devrath

콜백없이 내 파일이 작성되지 않은 이유는 무엇인지 모르겠습니다.
Tomasz Gandor

1
고마워, 그것은 많은 도움이되었습니다.
Suraj Jain

83

객체를 예쁘게 인쇄하고 유효한 JSON으로 내 보내지 않으려면을 사용할 수 있습니다 console.dir().

구문 강조, 스마트 들여 쓰기를 사용하고 키에서 따옴표를 제거하고 출력을 예쁘게 만듭니다.

const jsonString = `{"name":"John","color":"green",
                     "smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

기록 된 개체의 스크린 샷

후드 아래의 바로 가기입니다 console.log(util.inspect(…)). 유일한 차이점은 inspect()개체에 정의 된 사용자 지정 함수를 무시한다는 것 입니다.


8
console.dir은 유효한 json을 생성하지 않습니다.
Gregg Lind

1
@GreggLind 답변에서 그것을 명확히했습니다!
adius

이로 인해 Express 서버가 중단되었습니다. 나는 왜 그런지 모른다 :(
Sanket Berde

34

이것을 어디에도 저장하고 싶지 않지만 디버깅 목적으로 객체를 보는 것입니다.

console.log(JSON.stringify(object, null, "  "));

들여 쓰기를 조정하기 위해 세 번째 매개 변수를 변경할 수 있습니다.


1
나는이 솔루션을 찾고 있습니다. 마지막 매개 변수는 매력처럼 작동합니다!
vt2424253

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