JSON ऑब्जेक्ट को fs.writeFileSync के साथ JSON फ़ाइल में लिखना


116

मैं एक JSON फ़ाइल में JSON ऑब्जेक्ट लिखने की कोशिश कर रहा हूं। कोड त्रुटियों के बिना निष्पादित होता है, लेकिन ऑब्जेक्ट की सामग्री के बजाय लिखा गया है, जो JSON फ़ाइल में लिखा जाता है:

[object Object]

यह वह कोड है जो वास्तव में लेखन करता है:

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

'आउटपुट' एक JSON ऑब्जेक्ट है, और फ़ाइल पहले से मौजूद है। कृपया मुझे बताएं कि क्या अधिक जानकारी की आवश्यकता है।


11
fs.writeFileSync ('../ डेटा / वाक्यांशफ्रेकजसन', JSON.stringify (आउटपुट)
डैनियल

जवाबों:


169

आपको ऑब्जेक्ट को सख्त करने की आवश्यकता है।

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

2
एसओ में आपका स्वागत है, एक प्रश्न का उत्तर देने से पहले, मौजूदा उत्तर की समीक्षा करने का प्रयास करें। यदि आपका उत्तर पहले ही सुझाया जा चुका है, तो उस उत्तर को बदल दें। एक अच्छा उत्तर लिखने के लिए समुदाय गाइड देखें ।
लाइटबेंडर

44
मुझे यह पसंद है कि यह इस सवाल का जवाब देता है कि क्या सिंक्रोनस बनाम एसिंक्स ऑपरेशन का उपयोग करना है या नहीं।
ब्रायन डंकन

1
: पठनीयता प्रयोजनों के लिए, आप JSON.stringify विधि के अंतरिक्ष पैरामीटर का उपयोग कर सकते हैं fs.writeFileSync('../data/phraseFreqs.json', JSON.stringify(output, null, 2));: अधिक developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
बिन्ह

48

मुझे नहीं लगता कि आपको तुल्यकालिक दृष्टिकोण का उपयोग करना चाहिए, अतुल्यकालिक रूप से फाइल में डेटा लिखना बेहतर है, outputअगर यह एक है तो इसे भी कड़ा कर दें object

नोट: यदि outputएक स्ट्रिंग है, तो एन्कोडिंग निर्दिष्ट करें और flagसाथ ही विकल्पों को याद रखें ।:

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

किसी फ़ाइल में डेटा लिखने की सिंक्रोनस विधि जोड़ा गया है, लेकिन कृपया अपने उपयोग के मामले पर विचार करें। अतुल्यकालिक बनाम तुल्यकालिक निष्पादन, इसका वास्तव में क्या मतलब है?

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

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

9
यदि यह एक छोटी स्क्रिप्ट या कुछ और में किया जा रहा है, तो सिंक्रोनस ठीक है। यदि यह एक सर्वर अनुरोध या कुछ का हिस्सा है, तो यह अतुल्यकालिक होना चाहिए।
हिल्टन शुमवे

1
जरूरी नहीं कि I / O बाध्य प्रक्रियाओं को अतुल्यकालिक बनाया जाए, लेकिन संक्षिप्त स्क्रिप्ट जटिलता के आधार पर आप सिंक्रोनस का विकल्प चुन सकते हैं।
एंकजाइड

4
यह सवाल का जवाब नहीं है।
स्टीफन बिज़ित्तर

6
उपयोगकर्ता ने विशेष रूप से सिंक्रोनस विधि के लिए पूछा
एंथनी

7
कृपया async अच्छा कहना बंद करो। और सिंक बुरा लागू कर रहा है। यदि आप गति के बारे में चिंतित हैं, तो आपके वेबपैक को आपके लिए यह अनुकूलन करना चाहिए। आप एक आशावादी नहीं हैं। कारण: json कमांड-लाइन टूल्स के लिए सिंक फाइल राइटिंग की जरूरत है। श्रृंखला में अगले ऐप के लिए डेटा को पाइप करने से पहले उनके पास जो भी फाइलें हैं उन्हें बंद करना होगा।
TamusJRoyce

27

तीसरा तर्क पास करके मानव को पठनीय बनाओ stringify:

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

1

वेब सर्वर पर डेटा भेजते समय, डेटा को एक स्ट्रिंग ( यहां ) होना चाहिए । आप जावास्क्रिप्ट ऑब्जेक्ट को एक स्ट्रिंग में बदल सकते हैं JSON.stringify()यहाँ एक काम कर उदाहरण है:

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

आशा है कि यह मदद कर सकता है।


1

यहां एक भिन्नता है, उस संस्करण का उपयोग करके fsवादों का उपयोग किया जाता है:

const fs = require('fs');

await fs.promises.writeFile('../data/phraseFreqs.json', JSON.stringify(output)); // UTF-8 is default
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.