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.