Node.js'de biçimlendirilmiş JSON yazın


81

JSON'u PostBin'e POST yapmak için Node.js kullanıyorum, ancak veriler yanlış biçimlendiriliyor (burada görebileceğiniz gibi: http://www.postbin.org/1cpndqw ).

TesT için kullandığım kod bu:

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}sorununu çözdün mü? Verileri doğru bir şekilde göndermişsiniz gibi görünüyor.
Raynos

Veriler doğru ama "çirkin", böyle göndermek istiyorum, anlaşılması daha kolay: postbin.org/1ijyltn#xa6rim
donald

Yanıtlar:


10

Öncelikle, JSON'un nasıl biçimlendirildiğini umursamadığı ve kendiniz herhangi bir biçimlendirme yapmadığınız için. İhtiyacınız olan şey, eğer umursuyorsanız, bir javascript yazıcısıdır, ancak ilk soru "Neden umursuyorsunuz?"

İşte Javascript Tariflerinden güzel bir baskı kodu.

Aslında burada SO'da bir sürü farklı örnek var .

GÜNCELLEME

Tamam, öyleyse şimdi istediğini yapıyor, hadi doğru şeyi yapıyor musun diye soralım. Birkaç kişinin de belirttiği gibi, bu fazladan yeni satırları ve sekmeleri veya boşlukları iletmenize gerek yoktur; verimlilik maliyeti düşüktür, muhtemelen yüzde 2-5 civarında, ancak yüzde birkaçına ne zaman ihtiyaç duyacağınızı asla bilemezsiniz.

Öte yandan, JSON çıktısını önceden yazılmış metin olarak okuyabilmenin çok daha uygun olduğuna tamamen katılıyorum. Ancak başka bir çözüm daha var - bu sonuçlara bakmak için muhtemelen bir tarayıcı kullanıyorsunuzdur, bu nedenle aktarım için güzelce yazdırmak yerine, bir istemci tarafı güzel yazıcı kullanın. Kullandığım Chrome için JSONView ve JSONView Firefox'ta. Birçok hata ayıklayıcı, JSON sonuçlarını sizin için de güzel bir şekilde yazdıracaktır.


İletim amacıyla, fazladan biçimlendirme verisi göndermek / almak istemezsiniz. Fazladan boşluklu JSON, makineden farklı bir şey ifade etmez ... sadece onu anlaması gereken bir insan için önemlidir. İdeal olarak, gerçekten bakması gereken bir kişi olduğunda bunu güzelce yazdırmak istersiniz.
entropo

@donald nasıl göründüğünü neden önemsiyorsun? JSON ham verilerdir. Boşluk umrunda değil.
Raynos

BT şu şekilde çalıştı: console.log (JSON.stringify ({a: 1, b: 2, c: 3}, null, '\ t')); konsolda, ancak yine de PostBin bunu doğru yapmıyor. Belki bu onların sorunu?
donald


348

Girinti birimi olarak kullanılacak boşluk sayısını JSON.stringify(object, null, 4)nerede kullanın 4. Ayrıca "\t"sekmeler istiyorsanız da kullanabilirsiniz . Bu aslında ECMAScript 5 şartnamenin bir parçası , ve MDN üzerinde belgelenmiştir .


3
Vay canına, teşekkürler! Bunun neden artık belgelenmediğini merak ediyorum. Mevcut olmadığını varsaydım.
mrjf

Evet, tuhaf. Belki de kullanımdan kaldırılma yolunda ya da başka bir şeydir? Sadece bir belge gözetimi mi? Emin değil.
Peter Lyons

6
@PeterLyons, bu ECMAScript 5 spesifikasyonundadır. Belki de düğüme özgü olmayan şeyleri belgelemek istemiyorlardı.
Matthew Flaschen

FWIW, bu esasen her yerde belgelenmiş gibi görünüyor ve şu an itibariyle Düğüme özgü görünmüyor.
Dave Newton

6

Çalıştığını bulduğum iki adımlı bir süreç kullandım:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.