JSON'u node.js kullanarak nasıl güzel yazdırabilirim?


436

Bu çözülmüş bir problem gibi görünüyor ama bunun için bir çözüm bulamıyorum.

Temel olarak, bir JSON dosyasını okudum, bir anahtarı değiştirdim ve yeni JSON'u aynı dosyaya yazdım. Tüm çalışır, ancak JSON biçimlendirme kaybetti.So, bunun yerine:

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

alırım

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

Node.js'de dosyaya iyi biçimlendirilmiş JSON yazmanın bir yolu var mı?


JSON.stringifydöngüsel nesneleri boğar ve util.inspectgeçerli json üretmez. : \ NodeJS'de güzel baskı JSON'a [yerel] bir çözüm bulamadım
ThorSummoner

@ThorSummoner: Bu Düğümde değil JSON ile ilgili bir sorundur — JSON döngüsel başvuruları yerel olarak desteklemez. Burada başka bir soruda bir çözüm var .
Sasha Chedygov

Yanıtlar:


814

JSON.stringify'nin üçüncü parametresi, güzel baskı için beyaz boşluk yerleştirmeyi tanımlar. Bir dize veya bir sayı olabilir (boşluk sayısı). Düğüm ile dosya sisteminize yazabilirsiniz fs. Misal:

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,
}
*/

MDN , Düğüm fs belgelerinde JSON.stringify () belgelerine bakın


1
Not: 4 yerine "\t"sekme istiyorsanız kullanın .
Jeremy Thille

En son düğümlerde üçüncü parametre olarak bir geri arama işlevi sağlamanız gerekir, şu yanıta bakın: stackoverflow.com/a/11677276/675065
Alp

216

Bunun yararlı olabileceğini düşünüyorum ... Örnek kodu seviyorum :)

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
tmpKlasörün var olduğundan emin olun, aksi takdirde bu başarısız olabilir.
Larry Battle

2
çoğu unix sisteminde (Mac ve Linux dahil .. ve BSD'yi hatırlıyorsam), tmpklasör varsayılan olarak bulunur
Antony

pencerelerde verilecek konum (Çıktı dosya adı) nedir
Devrath

Dosyamın geri arama olmadan neden yazılmadığını (boş açıldığını) bilmiyorum ... Ya da belki de zaman uyumsuz ve uygulama başlatılırken bir istisna atılmış olduğu için işe yaramadı?
Tomasz Gandor

1
Teşekkürler, bana çok yardımcı oldu.
Suraj Jain

83

Bir nesneyi güzel bir şekilde yazdırmak ve geçerli bir JSON olarak dışa aktarmak istemiyorsanız kullanabilirsiniz console.dir().

Sözdizimi vurgulama, akıllı girinti kullanır, tırnaklardan anahtarları kaldırır ve çıktıyı olabildiğince güzel yapar.

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

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

Günlüğe kaydedilen nesnenin ekran görüntüsü

Kaputun altında bunun için bir kısayol var console.log(util.inspect(…)). Tek fark, inspect()bir nesne üzerinde tanımlanan herhangi bir özel işlevi atlamasıdır .


8
console.dir geçerli json üretmiyor.
Gregg Lind

1
@GreggLind Cevapta açıklığa kavuşturuldu!
adius

Bu benim hızlı sunucu durak yaptı. Neden bilmiyorum :(
Sanket Berde

34

Bunu hiçbir yerde saklamak istemezseniz, ancak nesneyi hata ayıklama amacıyla görüntülerseniz.

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

Girintiyi ayarlamak için üçüncü parametreyi değiştirebilirsiniz.


1
Sonsuza dek bu çözümü arıyordum! Son param bir cazibe gibi çalışıyor!
vt2424253

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.