আমি কীভাবে '[অবজেক্ট]' না দিয়ে নোড.জেএস এর কনসোল.লগ () এ পূর্ণ বস্তু পেতে পারি?


888

ডিবাগিং ব্যবহার করে যখন 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

উত্তর:


1454

আপনার ব্যবহার করা দরকার 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
সুন্দর সমাধান। যদিও এটি {শোহাইডেন: মিথ্যা specify নির্দিষ্ট করার দরকার নেই যতক্ষণ না এটি মিথ্যা হিসাবে ডিফল্ট হয়।
প্রত্যক্ষদর্শী

36
জানা ভাল; এটি কখন চালু হয়েছিল তা নিশ্চিত নয়, তবে কমপক্ষে নোডের হিসাবে তার যুক্তিগুলিতে v0.10.33 console.log() অন্তর্নিহিতভাবে প্রযোজ্য util.inspect(), প্রথমত ধরে নেওয়া যে এটি কোনও বিন্যাসের স্ট্রিং নয়। যদি আপনি util.inspect()'ডিফল্ট বিকল্পগুলি দিয়ে খুশি হন , কেবল console.log(myObject)তাই করবেন - প্রয়োজন হবে না util; console.dir()একই কাজ করে তবে পরিদর্শন করতে কেবল `বস্তু গ্রহণ করে; কমপক্ষে v0.11.14, আপনি util.inspect()দ্বিতীয় তর্ক হিসাবে বিকল্প বিকল্পটি পাস করতে পারেন ; আমার উত্তরে আরও বিশদ রয়েছে।
mklement0

4
@ mklement0 আমি নোড v5.3.0 আছে এবং যখন আমি console.log(obj)যেমন আপনি বর্ণনা এটি এখনও গভীরভাবে নেস্টেড অবজেক্টের জন্য কপি করে প্রিন্ট [অবজেক্ট] :( আমি সত্যিই ইচ্ছা আচরণ করবে।
, SSH এই

47
@SSH: console.log()হয় অপরিবর্তনীয়ভাবে সীমাবদ্ধ 2 মাত্রা (কারণ এটি ব্যবহার করে util.inspect()আপনি এটি পরিবর্তন করতে সক্ষম হবেন ছাড়া এর ডিফল্ট); console.dir()ডিফল্টরূপে একই সীমা রয়েছে, তবে আপনি এটি পরিবর্তন করতে ২ য় আর্গুমেন্ট হিসাবে বিকল্প বিকল্পে পাস করতে পারেন (যা দিয়ে গেছে util.inspect(); নোট যে একবারে console.dir() কেবল 1 টি বস্তু মুদ্রণ করতে পারে তবে সীমাহীন গভীরতার সাথে মুদ্রণ করতে ব্যবহার করুন console.dir(myObject, { depth: null })
mklement0

13
console.dir(myObject, { depth: null })আমার জন্য কাজ
ভেক হিয়াসিয়াও

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 এ রূপান্তরিত করবে" নিক্ষেপ করবে।
ইগনাসিও লেগো

11
এটি সম্পূর্ণ বস্তু নয়। কেবলমাত্র ফাংশনযুক্ত বস্তুগুলি {} হবে} অবশ্যই আপনি কী মুদ্রণ করতে চান তার উপর নির্ভর করে এটি ইতিবাচক বা নেতিবাচক হতে পারে।
লরেন্স ওয়েরু

1
console.log(JSON.stringify(myObject, null, 4));বেশ দারুন! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300
xgqfrms

1
আমার ক্ষেত্রে আমি এই ত্রুটিটি পেয়েছি TypeError: বিজ্ঞপ্তি কাঠামোটি JSON এ রূপান্তর করা
প্রেম সানিল

313

(কমপক্ষে) নোড.জেএস 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 REPL ব্যবহার util.inspect() পরোক্ষভাবে । এটি সরাসরি কল করা এবং কল করার প্রয়োজন হয় নাrequire('util')util.inspect()

নিচে বিস্তারিত.


  • console.log()(এবং এর নাম, console.info()):

    • যদি প্রথম আর্গুমেন্টটি বিন্যাসের স্ট্রিং না হয় : 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 }সাথে প্রিন্টগুলি ; নিচে দেখ.
        • আপনি সিনট্যাক্স রঙ চালু করতে পারবেন না।
    • যদি প্রথম আর্গুমেন্টটি একটি ফর্ম্যাট স্ট্রিং (নীচে দেখুন): 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() স্টাইলে প্রতিনিধিত্ব করার জন্য কোনও স্থানধারক নেই ।
        • জেএসএন দিয়ে উত্পন্ন %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.
    • নোড.জেএস v0.11.14 + : 2nd চ্ছিক দ্বিতীয় আর্গুমেন্টের জন্য বিকল্পগুলিutil.inspect() নির্দিষ্ট করে - নীচে দেখুন; উদাহরণ:
      • console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
  • REPL : পরোক্ষভাবে যে কোনো অভিব্যক্তি ফেরানো মানটি ছাপে util.inspect() সঙ্গে সিনট্যাক্স রং ;
    উদাহরণস্বরূপ, কেবলমাত্র একটি ভেরিয়েবলের নাম টাইপ করুন এবং এন্টার চাপলে এর মানটির একটি পরিদর্শন করা সংস্করণ মুদ্রিত হবে; উদাহরণ:
    • o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.

util.inspect()স্বয়ংক্রিয়ভাবে চমত্কারভাবে মুদ্রিত অবজেক্ট এবং অ্যারের উপস্থাপনাগুলি প্রযোজ্য , তবে কেবলমাত্র যখন প্রয়োজন হবে তখন মাল্টলাইন আউটপুট উত্পাদন করে ।

  • চমত্কার-মুদ্রণ আচরণ by compactচ্ছিক optionsযুক্তিতে সম্পত্তি দ্বারা নিয়ন্ত্রণ করা যেতে পারে ; falseমাল্টি-লাইন আউটপুটটি নিঃশর্তভাবে ব্যবহার করে , যেখানে trueপুরোপুরি সুন্দর-প্রিন্টিং অক্ষম করে; শর্তসাপেক্ষে বহু-লাইন আচরণ নিয়ন্ত্রণ করতে এটি কোনও সংখ্যায় (ডিফল্ট হ'ল 3) সেট করা যেতে পারে - দস্তাবেজগুলি দেখুন

  • ডিফল্টরূপে আউটপুট কোনও ফাইল বা টার্মিনালে প্রেরণ করা হয় তা নির্বিশেষে শেরে প্রায় 60 টি অক্ষরে মোড়ানো থাকে thanks অনুশীলনে, যেহেতু লাইন বিরতি কেবল সম্পত্তির সীমানায় ঘটে থাকে , তাই আপনি প্রায়শই সংক্ষিপ্ত রেখাগুলি দিয়ে শেষ করতে পারেন তবে সেগুলি দীর্ঘও হতে পারে (যেমন দীর্ঘ সম্পত্তির মান সহ) values

  • V6.3.0 + এ আপনি breakLength60-অক্ষরের সীমাটি ওভাররাইড করতে বিকল্পটি ব্যবহার করতে পারেন ; আপনি যদি এটি সেট করে থাকেন Infinity, সমস্ত কিছুই এক লাইনে আউটপুট ।

আপনি যদি প্রিন্ট-প্রিন্টিংয়ের উপর আরও নিয়ন্ত্রণ চানJSON.stringify() তবে ২ য় যুক্তির সাহায্যে বিবেচনা করুন , তবে নিম্নলিখিতটি নোট করুন:

  • বিশ্বব্যাপী প্রসঙ্গে যেমন বিজ্ঞপ্তিযুক্ত রেফারেন্স রয়েছে এমন বস্তুর সাথে ব্যর্থ হয় module
  • পদ্ধতি (ফাংশন) ডিজাইন দ্বারা অন্তর্ভুক্ত করা হবে না।
  • আপনি লুকানো (অগণিত) বৈশিষ্ট্যগুলি দেখানোর বিকল্প বেছে নিতে পারবেন না।
  • উদাহরণ কল:
    • JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces

util.inspect()অপশন অবজেক্ট (দ্বিতীয় তর্ক):

একটি alচ্ছিক বিকল্প অবজেক্ট পাস হতে পারে যা ফর্ম্যাট স্ট্রিংয়ের কিছু দিককে পরিবর্তন করে; সমর্থিত কয়েকটি সম্পত্তি হ'ল:

বর্তমান, সম্পূর্ণ তালিকার জন্য সর্বশেষতম নোড.জেএস ডক্স দেখুন ।

  • showHidden

    • যদি true, তবে অবজেক্টের অ-গুণযোগ্য বৈশিষ্ট্যগুলি [আপনি যখন ব্যবহার করবেন তখন প্রদর্শিত না হওয়ার জন্য মনোনীত for keys in objবা Object.keys(obj)] খুব দেখানো হবে। ডিফল্ট false
  • depth

    • অবজেক্টটি ফর্ম্যাট করার সময় কতবার পুনরাবৃত্তি করতে হবে তা পরিদর্শন করতে বলে। এটি বৃহত জটিল বস্তুগুলি পরিদর্শন করার জন্য দরকারী is ডিফল্ট ২ এ। এটি অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করতে পাস করুন null
  • colors

    • যদি সত্য হয়, তবে আউটপুটটি এএনএসআই রঙ কোডগুলির সাথে স্টাইলযুক্ত হবে। ডিফল্ট false। রঙগুলি অনুকূলিতকরণযোগ্য [… - লিঙ্কটি দেখুন]।
  • customInspect

    • যদি false, তবে inspect()পরিদর্শন করা অবজেক্টগুলিতে সংজ্ঞায়িত কাস্টম ফাংশনগুলি কল করা হবে না। ডিফল্ট true

util.format()ফর্ম্যাট-স্ট্রিং প্লেসোল্ডার (প্রথম যুক্তি)

সমর্থিত কিছু স্থানধারক হলেন:

বর্তমান, সম্পূর্ণ তালিকার জন্য সর্বশেষতম নোড.জেএস ডক্স দেখুন ।

  • %s - স্ট্রিং
  • %d - সংখ্যা (পূর্ণসংখ্যা এবং ভাসমান উভয়)
  • %j - জেএসওএন
  • %%- একক শতাংশের চিহ্ন ('%')। এটি কোনও যুক্তি গ্রহন করে না।

1
এটিকে সহজ করার একটি উপায় হ'ল console.dir(...)সমস্ত টাইপিং ছাড়াই একটি ছোট নামকরণের ফাংশন করা : show = (v, depth=null)=> console.dir(v,{depth:depth})এবং তারপরে এটিকে এভাবে show(variable)বা কল করুন show(variable, depth=1)
লোকো.লুপ

56

আরেকটি সহজ পদ্ধতি হ'ল এটিকে জসনে রূপান্তর করা

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

12
দুর্দান্ত কৌশল কিন্তু আউটপুট পূর্বনির্ধারিত হবে না, যা বড় অবজেক্ট (প্রশ্নের বিন্দু) পড়ার পক্ষে কঠিন করে তোলে।
ড্যান ড্যাসকলেসকু

2
এখনও খুব দরকারী, এবং প্রয়োজনের তুলনায় jsonlint.com এ অনুলিপি এবং আটকানো দ্রুত utils:)
এসএসএইচ

1
আমি মনে করি এটি আপনার পক্ষে একটি সম্পাদক রয়েছে যা আপনার জন্য
জসনকে




24

সম্ভবত console.dirআপনার প্রয়োজন হয়।

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

অবজেক্ট এবং প্রিন্টগুলিতে স্ট্যান্ডআউটে স্ট্রিংয়ের স্ট্রিংয়ের জন্য Use.inspect ব্যবহার করে।

আপনার আরও নিয়ন্ত্রণের প্রয়োজন হলে ব্যবহার বিকল্পটি ব্যবহার করুন।



(কমপক্ষে) v0.11.14 হিসাবে, আপনি 2 টি আর্গুমেন্ট হিসাবে কোনও অপশন অবজেক্টটি পাস করতে পারেন, যা পাস হয়েছে util.inspect()
mklement0

21

আপনি করতে পারেন

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

19

অবজেক্টগুলি পরিদর্শন করার একটি ভাল উপায় হ'ল নোডের জন্য ক্রোম ডেভটুলগুলির সাথে নোড - ইনস্পেক্ট বিকল্প ব্যবহার করা ।

node.exe --inspect www.js

chrome://inspect/#devicesক্রোমে খুলুন এবং নোডের জন্য ডেডিকেটেড ডিভটুলগুলি খুলুন ক্লিক করুন

এখন প্রতিটি লগইন করা অবজেক্ট ক্রোমগুলিতে নিয়মিত জেএসের মতো পরিদর্শক হিসাবে উপলব্ধ।

এখানে চিত্র বর্ণনা লিখুন

ইন্সপেক্টরকে আবার খোলার দরকার নেই, নোড শুরু হওয়ার সাথে সাথে পুনরায় চালু হওয়ার সাথে সাথে এটি স্বয়ংক্রিয়ভাবে নোডের সাথে সংযোগ স্থাপন করে। নোডের জন্য উভয় --inspect এবং ক্রোম ডেভটুলগুলি নোড এবং Chrome এর পুরানো সংস্করণগুলিতে উপলভ্য নয়।


1
আমার জন্য একটি বার্তা: এটি চেষ্টা করে দেখুন ->node.exe --inspect index.js
নিঃসঙ্গ

এটি শীর্ষে থাকা উচিত। সেরা উত্তর. :)
প্রিন্সবিলিজিকে

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 = নাল নোড সূচক j

আপনার কোড

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

@Bala আপনি "ইনস্টল npm ডিবাগ --save" আপনার প্রকল্পে "ডিবাগ" মডিউল ইনস্টল করতে হবে
Chintan

2

কীভাবে বস্তুগুলি প্রদর্শিত হয় তা ওভাররাইড করার জন্য নোড REPL এর অন্তর্নির্মিত সমাধান রয়েছে, এখানে দেখুন

REPL মডিউলটি অভ্যন্তরীণভাবে ব্যবহার করে util.inspect(), যখন মুদ্রণের মানগুলি। যাইহোক, যদি util.inspectবস্তুর ফাংশনটিতে কল থাকে তবে এটি প্রতিনিধিত্ব করে inspect()



0

JSON.stringify ()

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

ডেটা অবজেক্টগুলির গভীর পরিদর্শন করার জন্য দুর্দান্ত। এই পদ্ধতিটি অ্যারেযুক্ত নেস্টেড অ্যারে এবং নেস্টেড বস্তুগুলিতে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.