Node.js에 형식화 된 JSON 쓰기


81

Node.js를 사용하여 JSON을 PostBin에 POST하지만 데이터 형식이 잘못되었습니다 (여기에서 볼 수 있듯이 http://www.postbin.org/1cpndqw ).

이것은 tesT에 사용하는 코드입니다.

var http = require('http');

var options = {
  host: 'www.postbin.org',
  port: 80,
  path: '/1cpndqw',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.write(JSON.stringify({ a:1, b:2, c:3 }, null, 4));
req.end();

{"a":1,"b":2,"c":3}문제를 해결 했습니까? 데이터가 올바르게 게시 된 것 같습니다.
Raynos 2011-04-17

데이터는 정확하지만 "추악"합니다. 이해하기 쉽게 다음과 같이 보내 겠습니다
donald

답변:


10

글쎄요, 주로 JSON은 형식화 방식에 신경 쓰지 않고 직접 형식화를 수행하지 않기 때문입니다. 당신이 필요로하는 것은 자바 스크립트 프리티 프린터인데, 첫 번째 질문은 "당신은 왜 관심이 있습니까?"입니다.

다음 은 Javascript Recipes 의 예쁜 인쇄 코드입니다.

실제로 여기 에는 여러 가지 다른 예가 있습니다 .

최신 정보

좋아, 이제 당신이 원하는 것을하고있다. 당신이 옳은 일을하고 있는지 물어 보자. 여러 사람이 지적했듯이 추가 줄 바꿈과 탭 또는 공백을 전송할 필요가 없습니다. 효율성 비용은 2 ~ 5 % 정도로 적지 만 언제 몇 %가 필요할지 알 수 없습니다.

반면에 JSON 출력을 예쁜 텍스트로 읽을 수있는 것이 훨씬 더 편리하다는 데 완전히 동의합니다. 그러나 또 다른 해결책이 있습니다. 아마도 이러한 결과를보기 위해 브라우저를 사용하고있을 것이므로 전송을 위해 예쁘게 인쇄하는 대신 클라이언트 측 예쁜 프린터를 사용하십시오. Chrome 에는 JSONView를 사용 하고 Firefox 에서는 JSONView를 사용 합니다. 많은 디버거도 JSON 결과를 출력합니다.


전송 목적으로 추가 포맷 데이터를 보내거나 받고 싶지 않습니다. 추가 공백이있는 JSON은 기계와 다르지 않다는 의미입니다. 이해해야하는 사람에게만 중요합니다. 이상적으로는 실제로 볼 필요가있는 사람이있을 때만 예쁜 인쇄를 원합니다.
entropo 2011

@donald 왜 외모에 관심이 있습니까? JSON은 원시 데이터입니다. 공백은 신경 쓰지 않습니다.
Raynos 2011

IT는 다음과 같이 작동했습니다. console.log (JSON.stringify ({a : 1, b : 2, c : 3}, null, '\ t')); 콘솔에 있지만 여전히 PostBin은 올바르게 만들지 않습니다. 그들의 문제일까요?
도널드


348

사용 공간의 수는 들여 쓰기의 단위로 사용합니다. 탭을 원하는 경우 에도 사용할 수 있습니다 . 이것은 실제로 ECMA 스크립트 5 스펙의 일부 , 및 MDN 문서화 .JSON.stringify(object, null, 4)4"\t"


3
와우 감사합니다! 왜 이것이 더 이상 문서화되지 않았는지 궁금합니다. 나는 그것을 사용할 수 없다고 생각했습니다.
mrjf

그래, 이상해. 지원이 중단되는 길에있는 것일까 요? 문서 감독 일 뿐입니 까? 확실하지 않다.
Peter Lyons

6
@PeterLyons, 이것은 ECMAScript 5 사양에 있습니다. 아마도 그들은 노드에 한정되지 않은 것을 문서화하고 싶지 않았을 것입니다.
Matthew Flaschen

FWIW, 이것은 본질적으로 모든 곳에서 문서화 된 것으로 보이며 현재로서는 노드에 특정한 것으로 보이지 않습니다.
Dave Newton

6

나는 두 단계의 프로세스를 사용하여 작동하는 것으로 나타났습니다.

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")

2

당신은 체크 아웃해야합니다 강조-CLI - 그것은 JSON 데이터를 검사하고 처리하기위한 명령 줄 도구입니다.

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