मैं नोड्स का उपयोग करके JSON को कैसे प्रिंट कर सकता हूं?


436

यह एक हल की गई समस्या की तरह लगता है लेकिन मैं इसके लिए एक समाधान खोजने में असमर्थ हूं।

असल में, मैं एक JSON फ़ाइल पढ़ता हूँ, एक कुंजी बदलता है, और एक ही फ़ाइल पर नया JSON लिखता है। सभी काम करता है, लेकिन मैं JSON फॉर्मेटिंग को ढीला करता हूं। इसके बजाय:

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

मुझे मिला

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

वहाँ एक तरीका है Node.js में अच्छी तरह से स्वरूपित JSON फ़ाइल करने के लिए लिखने के लिए?


JSON.stringifyचक्रीय वस्तुओं पर चोक, और util.inspectवैध जोंस का उत्पादन नहीं करता है। : \ N मुझे नहीं मिला [देशी] सुंदर मुद्रण JSON में NodeJS का समाधान
ThorSummoner

@ थोरसुमोनर: यह JSON के साथ एक समस्या है, नोड के साथ नहीं- JSON मूल रूप से चक्रीय संदर्भों का समर्थन नहीं करता है। यहाँ एक समाधान है, एक अन्य प्रश्न में
साशा चेदिगोव

जवाबों:


814

JSON.stringifyतीसरा पैरामीटर सुंदर-मुद्रण के लिए सफेद-स्थान सम्मिलन को परिभाषित करता है। यह एक स्ट्रिंग या एक संख्या (रिक्त स्थान की संख्या) हो सकती है। नोड के साथ अपने फाइल सिस्टम को लिख सकते हैं fs। उदाहरण:

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 में JSON.stringify () डॉक्स देखें , नोड fs डॉक्स


1
नोट: 4 के बजाय, "\t"यदि आप टैब चाहते हैं तो उपयोग करें।
जेरेमी थेल

: नवीनतम NodeJS में आप तीसरे पैरामीटर के रूप में एक कॉलबैक फ़ंक्शन प्रदान करने की आवश्यकता है, इस सवाल का जवाब देखने के stackoverflow.com/a/11677276/675065
अल्प

216

मुझे लगता है कि यह उपयोगी हो सकता है ... मुझे उदाहरण कोड पसंद है :)

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
सुनिश्चित करें कि tmpफ़ोल्डर मौजूद है या फिर यह विफल हो सकता है।
लैरी बैटल

2
अधिकांश यूनिक्स प्रणालियों में (मैक और लिनक्स सहित..और अगर मैं बीएसडी को याद करता हूं), तो tmpफ़ोल्डर डिफ़ॉल्ट रूप से मौजूद है
एंटनी

खिड़कियों के मामले में क्या स्थान (आउटपुट फ़ाइल नाम) दिया जाना है
देवराठ

मुझे नहीं पता कि कॉलबैक के बिना मेरी फ़ाइल क्यों नहीं लिखी गई (बस खाली खोली गई) ... या शायद यह async है, और यह काम नहीं किया क्योंकि ऐप स्टार्टअप के दौरान मेरे पास एक अपवाद था?
टॉमस गैंडर

1
धन्यवाद, इसने मेरी बहुत मदद की।
सूरज जैन

83

यदि आप बस एक वस्तु को प्रिंट करना चाहते हैं और इसे वैध JSON के रूप में निर्यात नहीं करते हैं, तो आप इसका उपयोग कर सकते हैं console.dir()

यह सिंटैक्स-हाइलाइटिंग, स्मार्ट इंडेंटेशन का उपयोग करता है, कुंजी से उद्धरण हटाता है और बस आउटपुट को उतना ही सुंदर बनाता है जितना इसे मिलता है।

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

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

लॉग किए गए ऑब्जेक्ट का स्क्रीनशॉट

हुड के तहत यह एक शॉर्टकट है console.log(util.inspect(…))। एकमात्र अंतर यह है कि यह किसी inspect()वस्तु पर परिभाषित किसी भी कस्टम फ़ंक्शन को बायपास करता है ।


8
कंसोल .ir मान्य json का उत्पादन नहीं करता है।
ग्रीग लिंड

1
@GreggLind ने जवाब में स्पष्ट किया!
12

इससे मेरा एक्सप्रेस सर्वर ठप हो गया। मुझे नहीं पता कि क्यों :(
संकट बर्ड

34

यदि आप इसे कहीं संग्रहीत नहीं करना चाहते हैं, लेकिन केवल डिबगिंग उद्देश्यों के लिए ऑब्जेक्ट देखें।

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

आप इंडेंटेशन को समायोजित करने के लिए तीसरा पैरामीटर बदल सकते हैं।


1
मैं इस समाधान की तरह हमेशा के लिए देख रहा हूँ! आखिरी परम आकर्षण की तरह काम करता है!
vt2424253

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.