JSON nesnesini fs.writeFileSync ile bir JSON dosyasına yazma


116

Bir JSON dosyasına JSON nesnesi yazmaya çalışıyorum. Kod hatasız yürütülür, ancak nesnenin içeriği yazılmak yerine JSON dosyasına yazılan her şey şöyledir:

[object Object]

Yazıyı gerçekten yapan kod budur:

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

"çıktı" bir JSON nesnesidir ve dosya zaten var. Daha fazla bilgi gerekiyorsa lütfen bana bildirin.


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

Yanıtlar:


169

Nesneyi dizginlemeniz gerekir.

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

2
SO'ya hoş geldiniz, bir soruyu cevaplamadan önce mevcut cevabı gözden geçirmeyi deneyin. Cevabınız zaten önerilmişse, bunun yerine o cevaba olumlu oy verin. İyi bir cevap yazmak için topluluk kılavuzuna bakın .
LightBender

44
Bu, eşzamanlı ve eşzamansız işlemlerin kullanılıp kullanılmayacağına dair fikir olmadan soruyu yanıtlamasını seviyorum.
Brian Duncan

1
Okunabilirlik amacıyla, JSON.stringify yönteminin boşluk parametresini kullanabilirsiniz: fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));Daha Fazla: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Binh

48

Eşzamanlı yaklaşımı kullanmanız gerektiğini düşünmüyorum, eşzamansız olarak bir dosyaya veri yazmak, outputbir object.

Not: Bir outputdizeyse, kodlamayı belirtin ve flagseçenekleri de unutmayın :

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!");
}); 

Bir dosyaya veri yazmak için Eşzamanlı yöntem eklendi, ancak lütfen kullanım durumunuzu düşünün. Eşzamansız ve eşzamanlı yürütme, gerçekten ne anlama geliyor?

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

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

9
Kısa bir komut dosyasıyla veya başka bir şeyle yapılıyorsa, senkronizasyon iyidir. Bir sunucu isteğinin parçası veya benzeri bir şeyse, eşzamansız olmalıdır.
Hilton Shumway

1
Mutlaka değil, G / Ç'ye bağlı işlemler eşzamansız yapılmalıdır, ancak kısa komut dosyası karmaşıklığına bağlı olarak eşzamanlı olmayı tercih edebilirsiniz.
akinjide

4
Bu sorunun cevabı değil.
Stephan Bijzitter

6
Kullanıcı özellikle eşzamanlı yöntem istedi
Anthony

7
Lütfen eşzamansız iyi demeyi bırakın. Ve senkronizasyonun kötü olduğunu ima ediyor. Hız konusunda endişeliyseniz, web paketiniz bu optimizasyonu sizin için yapmalıdır. Sen bir optimize edici değilsin. Nedeni: json komut satırı araçları için eşitleme dosyası yazma gereklidir. Verileri zincirdeki bir sonraki uygulamaya aktarmadan önce açtıkları tüm dosyaları kapatması gerekir.
TamusJRoyce

27

Üçüncü bir argüman ileterek json'u okunabilir hale getirin stringify:

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

1

Bir web sunucusuna veri gönderirken, verilerin bir dizge olması gerekir ( burada ). İle bir JavaScript nesnesini dizeye dönüştürebilirsiniz JSON.stringify(). İşte çalışan bir örnek:

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}`);

Umarım yardımcı olabilir.


1

İşte fsvaatleri kullanan versiyonunu kullanan bir varyasyon :

const fs = require('fs');

await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
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.