Node.js में स्वरूपित JSON लिखें


81

मैं पोस्ट JSON से पोस्ट JSON के लिए Node.js का उपयोग कर रहा हूं, लेकिन डेटा गलत तरीके से तैयार किया जा रहा है (जैसा कि आप यहां देख सकते हैं: http://www.postbin.org/1cpndqw )।

यह वह कोड है जिसका मैं tesT के लिए उपयोग कर रहा हूं:

var http = require('http');

var options = {
  host: 'www.postbin.org',
  port: 80,
  path: '/1cpndqw',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.write(JSON.stringify({ a:1, b:2, c:3 }, null, 4));
req.end();

{"a":1,"b":2,"c":3}क्या आपने अपना मुद्दा ठीक किया? ऐसा लगता है जैसे आपको डेटा सही तरीके से पोस्ट किया गया है।
रेयानोस

डेटा सही है लेकिन "बदसूरत", मैं इस तरह से भेजना चाहता हूं, समझने में आसान: postbin.org/1ijyltn#xa6rim
डोनाल्ड

जवाबों:


10

खैर, मुख्य रूप से क्योंकि JSON यह कैसे स्वरूपित है परवाह नहीं है, और आप अपने आप को किसी भी स्वरूपण नहीं कर रहे हैं। यदि आपको एक जावास्क्रिप्ट प्रीटिप्रिन्टर की आवश्यकता है, यदि आप परवाह करते हैं, लेकिन पहला सवाल "आप क्यों परवाह करते हैं?"

यहाँ जावास्क्रिप्ट रेसिपी से एक प्रीटीप्रिन्टिंग कोड दिया गया है।

वास्तव में SO पर यहाँ विभिन्न उदाहरणों का एक पूरा समूह है ।

अपडेट करें

ठीक है, तो अब यह वही है जो आप चाहते हैं, चलो पूछें कि क्या आप सही काम कर रहे हैं। जैसा कि कई लोगों ने बताया है, आपको उन अतिरिक्त न्यूलाइन और टैब या स्पेस को प्रसारित करने की आवश्यकता नहीं है; दक्षता की लागत छोटी है, शायद 2-5 प्रतिशत के पड़ोस में है, लेकिन आपको कभी नहीं पता होगा कि आपको कुछ प्रतिशत की आवश्यकता कब हो सकती है।

दूसरी ओर, मैं इस बात से पूरी तरह सहमत हूँ कि यह JSON आउटपुट को प्रीटिप्रिंटेड टेक्स्ट के रूप में पढ़ने में सक्षम होने के लिए बहुत अधिक सुविधाजनक है। लेकिन एक और उपाय है - आप शायद इन परिणामों को देखने के लिए एक ब्राउज़र का उपयोग कर रहे हैं, इसलिए ट्रांसमिशन के लिए इसे पूर्व-निर्धारित करने के बजाय, क्लाइंट-साइड प्रीट्रिप्रीन्टर का उपयोग करें। मैं फ़ायरफ़ॉक्स में क्रोम के लिए JSONView और JSONView का उपयोग करता हूं । कई डीबगर आपके लिए JSON परिणाम भी बताएंगे।


संचरण उद्देश्यों के लिए, आप अतिरिक्त स्वरूपण डेटा भेजना / प्राप्त नहीं करना चाहते हैं। अतिरिक्त व्हाट्सएप के साथ JSON का मतलब मशीन से अलग कुछ भी नहीं है ... यह केवल एक मानव के लिए मायने रखता है जिसे इसे समझने की आवश्यकता है। आदर्श रूप में, आप केवल तब इसे प्रिंट करना चाहते हैं जब आपके पास वास्तव में कोई ऐसा व्यक्ति हो जिसे इसे देखने की आवश्यकता है।
एंट्रोपो

@ डोनाल्ड आपको इसकी परवाह क्यों है कि यह कैसा दिखता है? JSON कच्चा डेटा है। आपको व्हॉट्सएप की परवाह नहीं है।
Raynos

IT ने इस रूप में काम किया: कंसोल.लॉग (JSON.stringify ({a: 1, b: 2, c: 3}, null, '\ t')); कंसोल में, लेकिन फिर भी, PostBin इसे सही नहीं बनाता है। शायद यह उनकी समस्या है?
डोनाल्ड


348

उपयोग करें JSON.stringify(object, null, 4)कि 4इंडेंटेशन की इकाई के रूप में उपयोग करने के लिए रिक्त स्थान की संख्या कितनी है। "\t"यदि आप टैब चाहते हैं तो आप इसका उपयोग भी कर सकते हैं । यह वास्तव में ECMAScript 5 विनिर्देश का हिस्सा है , और एमडीएन पर प्रलेखित है


3
वाह धन्यवाद! मुझे आश्चर्य है कि यह अब क्यों नहीं प्रलेखित है। मैंने मान लिया कि यह उपलब्ध नहीं था।
mrjf

हाँ, यह अजीब है। शायद यह सड़क पर पदावनति या कुछ और है? बस एक दस्तावेज निरीक्षण? निश्चित नहीं।
पीटर लियोन्स

6
@PeterLyons, यह ECMAScript 5 युक्ति में है। हो सकता है कि वे सिर्फ उन चीजों का दस्तावेजीकरण करने का अनुभव नहीं करते थे जो नोड-विशिष्ट नहीं थे।
मैथ्यू फ्लैशेन

एफडब्ल्यूआईडब्ल्यू, यह हर जगह अनिवार्य रूप से प्रलेखित किया गया प्रतीत होता है, और अब के रूप में नोड-विशिष्ट प्रतीत नहीं होता है।
डेव न्यूटन

6

मैंने एक दो कदम प्रक्रिया का उपयोग किया जो मुझे काम करने के लिए मिली:

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")

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