मैं '[ऑब्जेक्ट] के बजाय Node.js के कंसोल.लॉग () में पूरी वस्तु कैसे प्राप्त कर सकता हूं?


891

डिबगिंग का उपयोग करते समय console.log(), मैं पूरी वस्तु कैसे प्राप्त कर सकता हूं?

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};    
console.log(myObject);

आउटपुट:

{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }

लेकिन मैं संपत्ति की सामग्री भी देखना चाहता हूं f

जवाबों:


1456

आपको उपयोग करने की आवश्यकता है util.inspect():

const util = require('util')

console.log(util.inspect(myObject, {showHidden: false, depth: null}))

// alternative shortcut
console.log(util.inspect(myObject, false, null, true /* enable colors */))

आउटपुट

{ a: 'a',  b: { c: 'c', d: { e: 'e', f: { g: 'g', h: { i: 'i' } } } } }

util.inspect()डॉक्स देखें ।


4
अच्छा समाधान है। हालांकि {showHidden: false} को निर्दिष्ट करने की आवश्यकता नहीं है, जब तक कि यह झूठे को डिफॉल्ट करता है।
11:24 पर ecdeveloper

36
जानकार अच्छा लगा; निश्चित नहीं है कि इसे कब पेश किया गया था, लेकिन कम से कम नोड के v0.10.33 console.log() रूपutil.inspect() में इसके तर्कों पर स्पष्ट रूप से लागू होता है, यह मानते हुए कि 1 एक प्रारूप स्ट्रिंग नहीं है। यदि आप util.inspect()डिफ़ॉल्ट विकल्पों से खुश हैं, तो बस console.log(myObject)करेंगे - कोई आवश्यकता नहीं util; console.dir()वही करता है, लेकिन निरीक्षण करने के लिए केवल `वस्तु स्वीकार करता है; कम से कम v0.11.14, आप util.inspect()2 तर्क के रूप में विकल्प ऑब्जेक्ट पास कर सकते हैं ; मेरे उत्तर में अधिक विवरण हैं।
mklement0

4
@ mklement0 मेरे पास नोड v5.3.0 है और जब मैं console.log(obj)इसे अभी भी गहराई से नेस्टेड ऑब्जेक्ट्स के लिए [ऑब्जेक्ट] प्रिंट करता हूं :( मैं वास्तव में चाहता हूं कि आप इसका वर्णन करें।
SSH This

47
@SSH: console.log()है निरपवाद रूप से करने के लिए सीमित 2 स्तर (क्योंकि यह का उपयोग करता है util.inspect()आप इसे बदलने के लिए अनुमति के बिना की डिफ़ॉल्ट); console.dir()डिफ़ॉल्ट रूप से एक ही सीमा होती है, लेकिन आप विकल्प ऑब्जेक्ट में 2 तर्क के रूप में बदल सकते हैं जो कि (जो इसके माध्यम से पारित हो जाता है util.inspect(); ध्यान दें कि एक समय में console.dir() केवल 1 ऑब्जेक्ट को कभी भी प्रिंट कर सकते हैं । हालांकि, असीमित गहराई के साथ प्रिंट करने के लिए, उपयोग करें) console.dir(myObject, { depth: null })
mklement0

13
console.dir(myObject, { depth: null })मेरे लिए काम है
Veck Hsiao

632

आप JSON.stringifyसिंटैक्स को याद रखने के लिए कुछ अच्छे इंडेंटेशन के साथ-साथ उपयोग कर सकते हैं और प्राप्त कर सकते हैं ।

console.log(JSON.stringify(myObject, null, 4));

{
    "a": "a",
    "b": {
        "c": "c",
        "d": {
            "e": "e",
            "f": {
                "g": "g",
                "h": {
                    "i": "i"
                }
            }
        }
    }
}

तीसरा तर्क इंडेंटेशन स्तर सेट करता है, इसलिए आप इसे इच्छानुसार समायोजित कर सकते हैं।

यहाँ और अधिक विवरण यदि आवश्यक हो:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify


2
लाइन ब्रेक और इंडेंटेशन के लिए भी +1 - लगभग हमेशा मेरे लिए व्यक्तिगत रूप से वांछित
Toblerpwn

59
ध्यान दें कि आप JSON.string को ऑब्जेक्ट्स को गोलाकार संदर्भों के साथ नहीं बता सकते । उदाहरण के लिए, यह DOM ऑब्जेक्ट्स के साथ होता है। स्ट्रिंग एक "त्रुटि: JSON को परिपत्र संरचना परिवर्तित करेगा" फेंक देगा।
इग्नासियो लागो

11
यह पूरी वस्तु नहीं है। केवल फ़ंक्शन वाले ऑब्जेक्ट {} होंगे। बेशक जो आप प्रिंट आउट करना चाहते हैं उसके आधार पर सकारात्मक या नकारात्मक हो सकता है।
लॉरेंस वेरु

1
console.log(JSON.stringify(myObject, null, 4));बहुत अच्छा! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300
xgqfrms

1
मेरे मामले में मुझे यह त्रुटि मिली टाइपर्रर: जोंसन को परिपत्र संरचना में परिवर्तित करना
प्रेम सानिल

313

कम से कम Node.js v0.10.33(स्थिर) / v0.11.14(अस्थिर) से (कम से कम) v7.7.4(इस उत्तर के लिए नवीनतम अद्यतन के रूप में संस्करण वर्तमान ) से कई उपयोगी उत्तरों का संकलन । उसकी मदद के लिए रोरी ओ'केन को टोपी की टिप ।

tl; डॉ

प्रश्न में उदाहरण के लिए वांछित आउटपुट प्राप्त करने के लिए, उपयोग करें console.dir():

console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion

क्यों नहीं util.inspect()? क्योंकि यह नैदानिक उत्पादन के दिल में पहले से ही है: console.log()और console.dir()साथ ही साथ Node.js आरईपीएल का उपयोग util.inspect() परोक्ष । यह आमतौर पर करने और कॉल करने के लिए आवश्यक नहीं हैrequire('util')util.inspect() सीधे करता है।

नीचे दिए गए विवरण।


  • console.log()(और इसका उपनाम console.info()):

    • यदि 1 तर्क एक प्रारूप स्ट्रिंग नहीं है : util.inspect()स्वचालित रूप से प्रत्येक तर्क पर लागू होता है:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
      • ध्यान दें कि आप विकल्पों को पास नहीं कर सकतेutil.inspect() इस मामले में , जिसका अर्थ है 2 उल्लेखनीय सीमाएँ:
        • आउटपुट की संरचनात्मक गहराई 2 स्तरों तक सीमित है (डिफ़ॉल्ट) ।
          • चूंकि आप इसे बदल नहीं सकते हैं console.log(), इसलिए आपको इसका उपयोग करना चाहिए console.dir(): असीमित गहराई वाले console.dir(myObject, { depth: null }प्रिंट ; निचे देखो।
        • आप सिंटैक्स रंग चालू नहीं कर सकते।
    • यदि 1 तर्क एक प्रारूप स्ट्रिंग है (नीचे देखें): util.format()प्रारूप स्ट्रिंग के आधार पर शेष तर्क मुद्रित करने के लिए उपयोग करता है (नीचे देखें); उदाहरण के लिए:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
      • ध्यान दें:
        • वस्तुओं- util.inspect() शैली का प्रतिनिधित्व करने के लिए कोई प्लेसहोल्डर नहीं है ।
        • JSON के साथ उत्पन्न %jसुंदर मुद्रित नहीं है।
  • console.dir():

    • निरीक्षण करने के लिए केवल 1 तर्क को स्वीकार करता है , और हमेशा लागू होता है util.inspect()- अनिवार्य util.inspect()रूप से, डिफ़ॉल्ट रूप से विकल्पों के बिना एक आवरण ; उदाहरण के लिए:
      • o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
    • Node.js v0.11.14 + : वैकल्पिक 2 तर्क के लिए विकल्पutil.inspect() निर्दिष्ट करता है - नीचे देखें; उदाहरण के लिए:
      • console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
  • REPL : स्पष्ट रूप util.inspect() से वाक्यविन्यास रंग के साथ किसी भी अभिव्यक्ति की वापसी मूल्य प्रिंट करता है ;
    यानी, केवल एक चर का नाम टाइप करना और Enter दबाकर उसके मान का एक निरीक्षण किया गया संस्करण मुद्रित करना होगा; उदाहरण के लिए:
    • o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.

util.inspect()स्वचालित रूप से सुंदर-प्रिंट ऑब्जेक्ट और सरणी अभ्यावेदन , लेकिन जरूरत पड़ने पर ही मल्टीलाइन आउटपुट तैयार करता है ।

  • सुंदर-मुद्रण व्यवहार compactको वैकल्पिक optionsतर्क में संपत्ति द्वारा नियंत्रित किया जा सकता है; बिनाfalse लाइन के मल्टी-लाइन आउटपुट का उपयोग करता है , जबकि पूरी तरह से प्रिंटिंग को अक्षम करता है; यह सशर्त बहु-पंक्ति व्यवहार को नियंत्रित करने के लिए एक नंबर (डिफ़ॉल्ट है ) पर भी सेट किया जा सकता है - डॉक्स देखें ।true3

  • डिफ़ॉल्ट रूप से, आउटपुट को लगभग 60 वर्णों पर लपेटा जाता है धन्यवाद, श्रेय , भले ही आउटपुट किसी फ़ाइल या टर्मिनल पर भेजा गया हो। व्यवहार में, चूंकि लाइन ब्रेक केवल संपत्ति की सीमाओं पर होता है , आप अक्सर छोटी लाइनों के साथ समाप्त हो जाएंगे, लेकिन वे लंबे समय तक भी हो सकते हैं (जैसे, लंबी संपत्ति मूल्यों के साथ)।

  • V6.3.0 + में आप breakLength60-वर्ण सीमा को ओवरराइड करने के विकल्प का उपयोग कर सकते हैं ; यदि आप इसे सेट करते हैं Infinity, तो सब कुछ एक ही लाइन पर आउटपुट होता है ।

यदि आप सुंदर प्रिंटिंग पर अधिक नियंत्रण चाहते हैं, तो JSON.stringify()3 तर्क के साथ उपयोग करने पर विचार करें , लेकिन निम्नलिखित पर ध्यान दें:

  • उन वस्तुओं के साथ विफल होता है जिनके पास परिपत्र संदर्भ होते हैं , जैसे moduleकि वैश्विक संदर्भ में।
  • तरीके (कार्य) डिजाइन द्वारा शामिल नहीं होंगे।
  • आप छिपे हुए (गैर-एन्यूमरेबल) गुणों को दिखाने का विकल्प नहीं चुन सकते।
  • उदाहरण कॉल:
    • JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces

util.inspect() विकल्प वस्तु (2 तर्क):

एक वैकल्पिक विकल्प ऑब्जेक्ट को पारित किया जा सकता है जो स्वरूपित स्ट्रिंग के कुछ पहलुओं को बदल देता है; समर्थित गुणों में से कुछ हैं:

वर्तमान, पूर्ण सूची के लिए नवीनतम Node.js डॉक्स देखें ।

  • showHidden

    • यदि true, तो ऑब्जेक्ट के गैर-संमिलित गुण [जिन्हें आप उपयोग करते हैं for keys in objया नहीं दिखाते हैं) को भी निर्दिष्ट नहीं किया Object.keys(obj)जाएगा। के लिए चूक false
  • depth

    • बताता है कि वस्तु का प्रारूपण करते समय कितनी बार पुनरावृत्ति होती है। यह बड़ी जटिल वस्तुओं के निरीक्षण के लिए उपयोगी है। चूक करना 2. इसे अनिश्चित काल के लिए फिर से पास करना null
  • colors

    • यदि सही है, तो आउटपुट ANSI रंग कोड के साथ स्टाइल किया जाएगा। के लिए चूक false। रंग अनुकूलन योग्य हैं [… - लिंक देखें]।
  • customInspect

    • यदि false, तो inspect()निरीक्षण की जा रही वस्तुओं पर परिभाषित कस्टम कार्य नहीं कहा जाएगा। के लिए चूक true

util.format()प्रारूप-स्ट्रिंग प्लेसहोल्डर (प्रथम तर्क)

कुछ समर्थित प्लेसहोल्डर हैं:

नवीनतम Node.js डॉक्स देखेंवर्तमान, पूर्ण सूची के लिए ।

  • %s - स्ट्रिंग।
  • %d - संख्या (पूर्णांक और फ्लोट दोनों)।
  • %j - JSON।
  • %%- एकल प्रतिशत संकेत ('%')। यह एक तर्क का उपभोग नहीं करता है।

1
एक तरीका यह आसान बनाने के लिए ऐसा करने के लिए एक छोटे से नामित समारोह करने के लिए किया जाएगा console.dir(...): सब बिना टाइपिंग show = (v, depth=null)=> console.dir(v,{depth:depth})और फिर इसे इतना की तरह फोन show(variable)या show(variable, depth=1)
loco.loop

56

एक और सरल विधि यह है कि इसे जसन में परिवर्तित किया जाए

console.log('connection : %j', myObject);

12
अच्छी चाल, लेकिन आउटपुट का उपयोग नहीं किया जाएगा, जिससे बड़ी वस्तुओं (प्रश्न के बिंदु) को पढ़ना मुश्किल हो जाता है।
डेन डस्केलस्क्यू

2
अभी भी बहुत उपयोगी है, और आवश्यकता की तुलना में jsonlint.com में कॉपी और पेस्ट करना है utils:)
SSH This

1
मुझे लगता है कि यह बहुत अच्छा है जब आपके पास एक संपादक होता है जो आपके लिए json को प्रारूपित करेगा लेकिन आपको इसे REPL से कॉपी करने की आवश्यकता है
jcollum

2
यह बहुत ही आसान और उपयोगी है यदि वस्तु छोटी है
चिन्मय सामंत

43

इसे इस्तेमाल करे:

console.dir(myObject,{depth:null})


24

शायद console.dirआप सभी की जरूरत है

http://nodejs.org/api/console.html#console_console_dir_obj

Obj और प्रिंट पर उपयोग करता है।

यदि आपको अधिक नियंत्रण की आवश्यकता है तो उपयोग विकल्प का उपयोग करें।



जैसा कि (कम से कम) v0.11.14, आप 2 तर्क के रूप में एक विकल्प ऑब्जेक्ट पास कर सकते हैं, जिसे पास किया गया है util.inspect()
mklement0

21

आप भी कर सकते हैं

console.log(JSON.stringify(myObject, null, 3));

19

वस्तुओं का निरीक्षण करने का एक अच्छा तरीका नोड के लिए क्रोम DevTools के साथ नोड --inspect विकल्प का उपयोग करना है ।

node.exe --inspect www.js

chrome://inspect/#devicesक्रोम में खोलें और नोड के लिए ओपन समर्पित DevTools पर क्लिक करें

अब हर लॉग ऑब्जेक्ट क्रोम में चलने वाले नियमित जेएस जैसे निरीक्षक में उपलब्ध है।

यहां छवि विवरण दर्ज करें

इंस्पेक्टर को फिर से खोलने की कोई जरूरत नहीं है, यह नोड शुरू होते ही या फिर से शुरू होते ही नोड से कनेक्ट हो जाता है। नोड के लिए दोनों --inspect और Chrome DevTools, Node और Chrome के पुराने संस्करणों में उपलब्ध नहीं हो सकते हैं।


1
मेरे लिए एक संदेश: कोशिश करो कि बाहर ->node.exe --inspect index.js
लोनली

यह शीर्ष पर होना चाहिए। सबसे बढ़िया उत्तर। :)
princebillyGK

11

ये दोनों प्रयोग लागू किए जा सकते हैं:

// more compact, and colour can be applied (better for process managers logging)
console.dir(queryArgs, { depth: null, colors: true });

// get a clear list of actual values
console.log(JSON.stringify(queryArgs, undefined, 2));

10

मुझे लगता है कि यह आपके लिए उपयोगी हो सकता है।

const myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};

console.log(JSON.stringify(myObject, null, '\t'));

इस उत्तर में बताया गया है :

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


4

आप बस inspect()अपने ऑब्जेक्ट में एक विधि जोड़ सकते हैं जो console.logसंदेशों में ऑब्जेक्ट के प्रतिनिधित्व को ओवरराइड करेगा

उदाहरण के लिए:

var myObject = {
   "a":"a",
   "b":{
      "c":"c",
      "d":{
         "e":"e",
         "f":{
            "g":"g",
            "h":{
               "i":"i"
            }
         }
      }
   }
};
myObject.inspect = function(){ return JSON.stringify( this, null, ' ' ); }

उसके बाद, आपकी वस्तु को कंसोल.लॉग और नोड शेल दोनों में आवश्यकतानुसार दर्शाया जाएगा


3

स्क्रिप्ट चलाते समय पर्यावरण चर के रूप में debugजोड़ने के लिए एक सरल चाल मॉड्यूल का उपयोग किया जाएगाDEBUG_DEPTH=null

पूर्व।

DEBUG = * DEBUG_DEPTH = null node index.js

आप कोड में

const debug = require('debug');
debug("%O", myObject);

@ बाला आपको अपनी परियोजना में "डीबग" मॉड्यूल स्थापित करने की आवश्यकता होगी "एनपीएम डीबग स्थापित करें
चिंतन

2

नोड REPL में ऑब्जेक्ट्स को प्रदर्शित करने के लिए अंतर्निहित समाधान है, यहां देखें ।

util.inspect()मान प्रिंट करते समय REPL मॉड्यूल आंतरिक रूप से उपयोग करता है । हालांकि, util.inspectऑब्जेक्ट के inspect() फ़ंक्शन को कॉल को दर्शाता है, अगर यह एक है।



0

JSON.stringify ()

let myVar = {a: {b: {c: 1}}};
console.log(JSON.stringify( myVar, null, 4 ))

डेटा ऑब्जेक्ट्स के गहन निरीक्षण के लिए बढ़िया। यह दृष्टिकोण नेस्टेड सरणियों और नेस्टेड ऑब्जेक्ट्स के साथ एरेस्टेड पर काम करता है।

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