একটি বস্তুকে একটি স্ট্রিতে রূপান্তর করা


974

আমি কীভাবে একটি জাভাস্ক্রিপ্ট অবজেক্টটিকে স্ট্রিংয়ে রূপান্তর করতে পারি?

উদাহরণ:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

আউটপুট:

অবজেক্ট {a = 1, খ = 2} // খুব সুন্দর পঠনযোগ্য আউটপুট :)
আইটেম: [অবজেক্ট অবজেক্ট] // ভিতরে কী নেই :(


7
স্ট্রিংকে কী উদ্দেশ্যে রূপান্তরিত করবেন? আপনার অর্থ সিরিয়ালাইজ করা হয়েছে যাতে আপনি স্ট্রিং থেকে পরে অবজেক্টটি তৈরি করতে পারেন? নাকি শুধু প্রদর্শনের জন্য?
শ্যাডো উইজার্ড আপনার পক্ষে কান

19
লেখক বছরের পর বছর ধরে চলেছেন, কিন্তু মনে রেখে পড়া, বছর পরে, আমার ধারণা, সমস্যার জন্য প্রবেশের বিন্দুটি ছিল কনসোল.লগ (অবজেক্ট), যা সম্পত্তি সহ বস্তু প্রদর্শন করে, যখন কনসোল.লগ ('আপত্তি:' + আপত্তি) ) অন্যথায় বিতর্কিতভাবে কাজ করে।
ডানুবিয়ান নাবিক

2
কেবল দুটি বস্তু যুক্ত করতে প্রয়োগ করতে পারে না, আমরা যদি এটি করতে পারি তবে মান ধরণের এবং রেফের ধরণের মধ্যে কোনও পার্থক্য থাকবে না।
নিশান্ত কুমার

12
var o = {a: 1, b: 2}; কনসোল.লগ ('আইটেম:' + জেএসওএন.স্ট্রিংফাই (ও))
কুমার

22
যদি এটি কনসোলের জন্য হয় তবে আমি এটি করার পরামর্শ দেব console.log("Item", obj);। জটিল কিছু করার দরকার নেই।
soktinpk

উত্তর:


1332

আমি ব্যবহারের পরামর্শ দেব JSON.stringify, যা বস্তুর ভেরিয়েবলগুলির সেটটিকে JSON স্ট্রিংয়ে রূপান্তর করে। বেশিরভাগ আধুনিক ব্রাউজারগুলি এই পদ্ধতিটি স্থানীয়ভাবে সমর্থন করে তবে তাদের ক্ষেত্রে আপনি জেএস সংস্করণ অন্তর্ভুক্ত করতে পারেন :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

7
রেফারেন্সের জন্য আই 6 এবং 7 এটি সমর্থন করে না। খুব কম সংখ্যক ব্যবহারকারীর কারণে আই 6 এটি এত বড় চুক্তি নয়, এবং এটি হত্যা করার জন্য একটি সক্রিয় প্রচারণা ... তবে এখনও সেখানে বেশ কয়েকটি আইআই 7 ব্যবহারকারী রয়েছেন (আপনার ব্যবহারকারীর উপর নির্ভর করে)।
মাইকমুরকো

30
আমি একটি "আনচ্যাচড টাইপয়েরর: বিজ্ঞপ্তি কাঠামোটি জেএসএন-তে রূপান্তরিত" পেয়েছি। কোনও বিজ্ঞপ্তি রেফারেন্স থাকলেও আমি এখনও আমার অবজেক্টের স্ট্রিং-প্রতিনিধিত্ব দেখতে চাই। আমি কি করতে পারি?
পাস্কেল ক্লেইন

26
এই যদি বস্তুর একটি ফাংশন সম্পত্তি, যেমন হয়েছে কাজ করে না: foo: function () {...}
ব্রুক অ্যাডামস

2
স্ট্যাকওভারফ্লো থেকে ক্লিক করা থাকলে JSON লাইব্রেরিতে লিঙ্কটি কাজ করে না। এটিকে ঠিকানা বারে অনুলিপি করুন এবং আটকান।
f.ardelian

1
আপনি JSON.stringify(obj, null, 2);একটি সুন্দর আউটপুট জন্য ব্যবহার করতে পারেন ।
l.poellabauer

126

জাভাস্ক্রিপ্ট স্ট্রিং () ফাংশন ব্যবহার করুন

 String(yourobject); //returns [object Object]

বা স্ট্রিংফাই ()

JSON.stringify(yourobject)

28
var foo = {বার: 1}; STRING (foo বিন্যাস); -> "[অবজেক্ট অবজেক্ট]"
এন্টি বীরাণা

1
var foo = {বার: 1}; STRING (foo বিন্যাস [ 'বার']); -> "1"
বিক্রম পোট

3
আপনি যদি স্ট্রিং হিসাবে পুরো অবজেক্টটি JSON.stringify (foo) ব্যবহার করতে চান
বিক্রম পোট

8
JSON.stringify(yourobject)দাসী আমার দিন!
নিউরোট্রান্সমিটার

1
@ ট্রান্সলুসেন্টক্লাউড * তৈরি করেছেন
পরম্পাল পুনি

87

অবশ্যই, কোনও বস্তুকে স্ট্রিংয়ে রূপান্তর করতে আপনাকে নিজের পদ্ধতিটি ব্যবহার করতে হবে, যেমন:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

প্রকৃতপক্ষে, উপরেরটি কেবল সাধারণ পদ্ধতির দেখায়; আপনি যেমন কিছু ব্যবহার করতে ইচ্ছুক হতে পারে http://phpjs.org/funitions/var_export:578 বা http://phpjs.org/funitions/var_dump:604 এর

অথবা, যদি আপনি পদ্ধতি ব্যবহার না করেন (আপনার সামগ্রীর বৈশিষ্ট্য হিসাবে ফাংশন), আপনি নতুন মানটি ব্যবহার করতে সক্ষম হতে পারেন (তবে পুরানো ব্রাউজারগুলিতে প্রয়োগ করা হয়নি, যদিও আপনি এটির জন্যও সহায়তা করার জন্য কোনও ইউটিলিটি খুঁজে পেতে পারেন), জেএসএন .stringify ()। তবে আবার, এটি যদি কাজ করে না তবে যদি বস্তুটি ফাংশন বা অন্যান্য বৈশিষ্ট্যগুলি ব্যবহার করে যা জেএসএনের সিরিয়ালাইজযোগ্য নয়।


78

এটিকে সহজ রেখে console, আপনি কেবল একটি এর পরিবর্তে কমা ব্যবহার করতে পারেন ++একটি স্ট্রিং মধ্যে বস্তুর রূপান্তর করতে, যেহেতু কমা কনসোলে এটা আলাদাভাবে প্রদর্শন করা হবে চেষ্টা করবে।

উদাহরণ:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

আউটপুট:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

উল্লেখ: https://developer.mozilla.org/en-US/docs/Web/API/Console.log


গ্রেট সমাধান! কিন্তু তুমি কি আমাকে বলতে পারতাম কি লোকচক্ষুর অন্তরালে ঘটে যখন আপনি কেবল এই একটি করুন: console.log(o)? যেহেতু আপনি যদি কোনও স্ট্রিংয়ের সাথে যুক্ত কোনও বস্তুকে লগ করার চেষ্টা করেন, এটি আসলে toString()অবজেক্টটিকে কল করে।
Gocy015

1
console.logচূড়ান্তভাবে এমন কিছু কল করে Printerযার নামটি অনুমান করে: "প্রয়োগটি কীভাবে প্রিন্ট করে তা বাস্তবায়নের উপর নির্ভর করে" - যার অর্থ প্রতিটি ব্রাউজার এই আলাদা করতে পারে ( কনসোল.স্পেক.সেটুজি.আর.জি . / প্রিন্টার দেখুন )। ফায়ারফক্স বস্তুগুলিকে স্ট্রিং হিসাবে প্রদর্শন করবে, তবে সুন্দরভাবে রঙিন। ক্রোম সেই বস্তুটিকে একটি ইন্টারেক্টিভ গ্রুপ হিসাবে প্রদর্শন করবে যা আপনি বৈশিষ্ট্যগুলি দেখতে আরও প্রসারিত করতে পারেন। একবার চেষ্টা করে দেখো!
লুক

2
আধুনিক ওয়েব ব্রাউজারগুলির জন্য খুব সুন্দর কৌশল এবং সম্ভবত দুর্দান্ত, তবে এটি সমস্ত জেএস বাস্তবায়নের জন্য 100% নির্ভরযোগ্য নয়। যেমন Qt QML- এ, যা জেএস ইঞ্জিন প্রয়োগ করে, এর ফলাফল console.log('Item: ', o);এখনও রয়েছে Item: [object Object]
পল মাস্রি-স্টোন

আপনি তার পরিবর্তে জাভাস্ক্রিপ্ট অবজেক্টটি মুদ্রণ করে স্ট্রিং হিসাবে মুদ্রণ console.logকরতে ব্যবহার করতে পারেন console.dir(o)। বিকাশকারী সরঞ্জামগুলিতে এটি অবজেক্টটি খুলতে এবং সমস্ত বৈশিষ্ট্য এমনকি অ্যারে পরীক্ষা করতে সক্ষম করে। (দেখুন: developer.mozilla.org/de/docs/Web/API/Console/dir )
agগলটি

37

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

টোসোর্স () হ'ল ফাংশন যা আপনি সন্ধান করছেন এটি এটি JSON হিসাবে লিখবে।

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());

6
যদিও এটি ফায়ারফক্সে ডিবাগ করার জন্য সুবিধাজনক, toSource()তবে আইই তে কাজ করে না।
ব্রেট জমির

4
toSource()একটি স্বীকৃত মান নয়, সুতরাং সমস্ত ব্রাউজারে সমর্থন করার গ্যারান্টি দেওয়া যায় না।
গ্যারি চেম্বারস

11
আহ, এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। যারা আমার জানা নেই তাদের জন্য আমি আমার উত্তর এখানে রেখে দেব।
গ্যাজলার

আমি আশা করি আমি আপনাকে আরও উত্সাহ দিতে পারতাম, কারণ এটি জাভাস্ক্রিপ্টযুক্ত পরিবেশগুলির জন্য একটি উজ্জ্বল সমাধান (তবে কনসোল লগটি অ্যাক্সেসযোগ্য / অ্যাক্সেস করা অসম্ভব)।
জ্যাক মরিস

আপনি টোসোর্সটিতে একটি পলিপিল সরবরাহ করতে পারেন: github.com/oliver-moran/toSource.js/blob/master/toSource.js
রোল্যান্ড

32

একটি বিকল্প :

console.log('Item: ' + JSON.stringify(o));

o স্ট্রিং হিসাবে মুদ্রিত হয়

আর একটি বিকল্প ( soktinpk মন্তব্যগুলিতে উল্লেখ করেছে), এবং কনসোল ডিবাগিং আইএমওর জন্য আরও ভাল:

console.log('Item: ', o);

o একটি অবজেক্ট হিসাবে মুদ্রিত হয়েছে, যা আপনার যদি আরও ক্ষেত্র থাকে তবে আপনি ড্রিল করতে পারেন


22

এখানকার কোনও সমাধানই আমার পক্ষে কাজ করেনি। JSON.stringify মনে হয় অনেক লোক যা বলে, কিন্তু এটি ফাংশনগুলি কেটে দেয় এবং এটি পরীক্ষার সময় কিছু বস্তু এবং অ্যারেগুলির জন্য বেশ বিচ্ছিন্ন বলে মনে হয়।

আমি আমার নিজস্ব সমাধান তৈরি করেছি যা কমপক্ষে ক্রোমে কাজ করে। এটি এখানে পোস্ট করা যাতে এটি গুগলে দেখায় যে কেউ এটি খুঁজে পেতে পারে।

//Make an object a string that evaluates to an equivalent object
//  Note that eval() seems tricky and sometimes you have to do
//  something like eval("a = " + yourString), then use the value
//  of a.
//
//  Also this leaves extra commas after everything, but JavaScript
//  ignores them.
function convertToText(obj) {
    //create an array that will later be joined into a string.
    var string = [];

    //is object
    //    Both arrays and objects seem to return "object"
    //    when typeof(obj) is applied to them. So instead
    //    I am checking to see if they have the property
    //    join, which normal objects don't have but
    //    arrays do.
    if (typeof(obj) == "object" && (obj.join == undefined)) {
        string.push("{");
        for (prop in obj) {
            string.push(prop, ": ", convertToText(obj[prop]), ",");
        };
        string.push("}");

    //is array
    } else if (typeof(obj) == "object" && !(obj.join == undefined)) {
        string.push("[")
        for(prop in obj) {
            string.push(convertToText(obj[prop]), ",");
        }
        string.push("]")

    //is function
    } else if (typeof(obj) == "function") {
        string.push(obj.toString())

    //all other values can be done with JSON.stringify
    } else {
        string.push(JSON.stringify(obj))
    }

    return string.join("")
}

সম্পাদনা: আমি জানি যে এই কোডটি উন্নত করা যেতে পারে তবে এটি করার মতো কখনও হয়নি। ব্যবহারকারী আন্দ্রে মন্তব্য সহ এখানে উন্নতির পরামর্শ দিয়েছেন :

এখানে কিছুটা পরিবর্তিত কোড রয়েছে যা 'নাল' এবং 'অপরিজ্ঞাত' পরিচালনা করতে পারে এবং অতিরিক্ত কমা যোগ করবে না।

এটিকে নিজের ঝুঁকিতে ব্যবহার করুন কারণ আমি এটিকে যাচাই করে নিই। মন্তব্য হিসাবে কোনও অতিরিক্ত উন্নতি প্রস্তাব নির্দ্বিধায়।


আপনি কিছু 's' এর
ডকোপেনহেগেন

2
খুব সুন্দর কোড, তবে ,প্রতিটি অবজেক্ট / অ্যারের শেষে একটি পিছনে রয়েছে।
NiCk নিউম্যান

এটি সেরা উত্তর
রোমান

20

যদি আপনি কেবল কনসোলে আউটপুট দিচ্ছেন তবে আপনি ব্যবহার করতে পারেন console.log('string:', obj)কমা লক্ষ করুন ।


এটি এজেএক্স এবং মুলতুবি খেলতে আসে এমন পরিস্থিতিতে পরিস্থিতিগুলির মধ্যে সমস্যা সৃষ্টি করে - এজেএএক্সএক্স সমান্তরালে ডেটার সাথে অ্যারের সরবরাহ শেষ করার পরে আউটপুট console.logপ্রায়শই প্রদর্শিত হয় , যা বিভ্রান্তিকর ফলাফলের দিকে নিয়ে যায়। এই ধরনের ক্ষেত্রে ক্লোনিং বা সিরিয়ালাইজিং হ'ল উপায়: যেহেতু আমরা ডুপ্লিকেট অবজেক্টটি লগইন করেছি, এমনকি যখন এজেএক্স এটির কাজ শেষ করে, এটি "পুরানো" ডেটা পূরণ করবে।
rr-

18

আপনি জানেন যে বিষয়গুলি কেবল একটি বুলিয়ান, তারিখ, স্ট্রিং, সংখ্যা ইত্যাদি ... জাভাস্ক্রিপ্ট স্ট্রিং () ফাংশনটি ঠিক কাজ করে works আমি সম্প্রতি jquery এর ea .Ech ফাংশন থেকে আসা মানগুলি নিয়ে কাজ করতে এই দরকারীটি পেয়েছি।

উদাহরণস্বরূপ, নিম্নলিখিতগুলির "মান" এর সমস্ত আইটেম একটি স্ট্রিংয়ে রূপান্তরিত হবে:

$.each(this, function (name, value) {
  alert(String(value));
});

আরও বিশদ এখানে:

http://www.w3schools.com/jsref/jsref_string.asp


বাvar my_string = ''+value+'';
জন ম্যাগনোলিয়া

1
আমার জন্য কাজ কর. আমি এই সমাধানটি পছন্দ করি কারণ আমি এই জাতীয় কোনও সহজ কাজের জন্য একটি প্লাগইন ব্যবহার করব না।
টিলিটো

15
var obj={
name:'xyz',
Address:'123, Somestreet'
 }
var convertedString=JSON.stringify(obj) 
 console.log("literal object is",obj ,typeof obj);
 console.log("converted string :",convertedString);
 console.log(" convertedString type:",typeof convertedString);

12

আমি এটি সন্ধান করছিলাম, এবং ইনডেন্টেশন সহ একটি গভীর পুনরাবৃত্ত লিখেছিলাম:

function objToString(obj, ndeep) {
  if(obj == null){ return String(obj); }
  switch(typeof obj){
    case "string": return '"'+obj+'"';
    case "function": return obj.name || obj.toString();
    case "object":
      var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj);
      return '{['[+isArray] + Object.keys(obj).map(function(key){
           return '\n\t' + indent + key + ': ' + objToString(obj[key], (ndeep||1)+1);
         }).join(',') + '\n' + indent + '}]'[+isArray];
    default: return obj.toString();
  }
}

ব্যবহার: objToString({ a: 1, b: { c: "test" } })


নোট করুন আপনি যদি সার্কুলার রেফারেন্স সঙ্গে অবজেক্টের জন্য অসীম loops প্রতিরোধ করতে চান, আপনি যোগ করতে পারেন if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }ফাংশনে, MAX_DEPTH_LEVEL বস্তুর স্তর আপনার নির্বাচিত সর্বোচ্চ সংখ্যা হচ্ছে খনন করেন।
SylvainPV

11

আপনি যদি কেবল ডিবাগিংয়ের জন্য অবজেক্টটি দেখতে চান তবে আপনি ব্যবহার করতে পারেন

var o = {a:1, b:2} 
console.dir(o)

9

1।

JSON.stringify(o);

আইটেম: {"a": "1", "খ": "2"}

2।

var o = {a:1, b:2};
var b=[]; Object.keys(o).forEach(function(k){b.push(k+":"+o[k]);});
b="{"+b.join(', ')+"}";
console.log('Item: ' + b);

আইটেম: {এ: ১, বি: ২}


1
আপনার উত্তর সম্পর্কে আরও বিশদ যুক্ত করার বিষয়টি বিবেচনা করলে ভাল হবে।
হারুন দিলুকা হেশান

8

জেএসওএন পদ্ধতিগুলি গেকো ইঞ্জিন। টোসোর্স () আদিম থেকে বেশ নিকৃষ্ট।

দেখুন তাই নিবন্ধটি প্রতিক্রিয়াতুলনা পরীক্ষার জন্য ।

এছাড়াও, উত্তর উপরে বোঝায় http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html যা তাদেরকে JSON, (যা অন্যান্য নিবন্ধ মত HTTP: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json মাধ্যমে ব্যবহারসমূহ "ExtJs তাদেরকে JSON সঙ্কেতাক্ষরে লিখা সোর্স কোড" ) সার্কুলার রেফারেন্স পরিচালনা এবং অসম্পূর্ণ পারবেন না। নীচের কোডটি এর (স্পুফের) সীমাবদ্ধতাগুলি দেখায় (সামগ্রী এবং বিন্যাসগুলি বিন্যাস ছাড়াই সংশোধন করা হয়েছে)।

( //forums.devshed.com/ এ কোডের সরাসরি লিঙ্ক ... / 38 -10-এ-অ্যারে-সহ টসোর্স )

javascript:
Object.prototype.spoof=function(){
    if (this instanceof String){
      return '(new String("'+this.replace(/"/g, '\\"')+'"))';
    }
    var str=(this instanceof Array)
        ? '['
        : (this instanceof Object)
            ? '{'
            : '(';
    for (var i in this){
      if (this[i] != Object.prototype.spoof) {
        if (this instanceof Array == false) {
          str+=(i.match(/\W/))
              ? '"'+i.replace('"', '\\"')+'":'
              : i+':';
        }
        if (typeof this[i] == 'string'){
          str+='"'+this[i].replace('"', '\\"');
        }
        else if (this[i] instanceof Date){
          str+='new Date("'+this[i].toGMTString()+'")';
        }
        else if (this[i] instanceof Array || this[i] instanceof Object){
          str+=this[i].spoof();
        }
        else {
          str+=this[i];
        }
        str+=', ';
      }
    };
    str=/* fix */(str.length>2?str.substring(0, str.length-2):str)/* -ed */+(
        (this instanceof Array)
        ? ']'
        : (this instanceof Object)
            ? '}'
            : ')'
    );
    return str;
  };
for(i in objRA=[
    [   'Simple Raw Object source code:',
        '[new Array, new Object, new Boolean, new Number, ' +
            'new String, new RegExp, new Function, new Date]'   ] ,

    [   'Literal Instances source code:',
        '[ [], {}, true, 1, "", /./, function(){}, new Date() ]'    ] ,

    [   'some predefined entities:',
        '[JSON, Math, null, Infinity, NaN, ' +
            'void(0), Function, Array, Object, undefined]'      ]
    ])
alert([
    '\n\n\ntesting:',objRA[i][0],objRA[i][1],
    '\n.toSource()',(obj=eval(objRA[i][1])).toSource(),
    '\ntoSource() spoof:',obj.spoof()
].join('\n'));

যা প্রদর্শন করে:

testing:
Simple Raw Object source code:
[new Array, new Object, new Boolean, new Number, new String,
          new RegExp, new Function, new Date]

.toSource()
[[], {}, (new Boolean(false)), (new Number(0)), (new String("")),
          /(?:)/, (function anonymous() {}), (new Date(1303248037722))]

toSource() spoof:
[[], {}, {}, {}, (new String("")),
          {}, {}, new Date("Tue, 19 Apr 2011 21:20:37 GMT")]

এবং

testing:
Literal Instances source code:
[ [], {}, true, 1, "", /./, function(){}, new Date() ]

.toSource()
[[], {}, true, 1, "", /./, (function () {}), (new Date(1303248055778))]

toSource() spoof:
[[], {}, true, 1, ", {}, {}, new Date("Tue, 19 Apr 2011 21:20:55 GMT")]

এবং

testing:
some predefined entities:
[JSON, Math, null, Infinity, NaN, void(0), Function, Array, Object, undefined]

.toSource()
[JSON, Math, null, Infinity, NaN, (void 0),
       function Function() {[native code]}, function Array() {[native code]},
              function Object() {[native code]}, (void 0)]

toSource() spoof:
[{}, {}, null, Infinity, NaN, undefined, {}, {}, {}, undefined]

8

বিদ্যমান উত্তরগুলিতে আসলে একটি সহজ বিকল্প (সাম্প্রতিক ব্রাউজার এবং নোড.জেএস এর জন্য) রয়েছে:

console.log('Item: %o', o);

আমি এটিকে JSON.stringify()কিছু নির্দিষ্ট সীমাবদ্ধতা (যেমন বৃত্তাকার স্ট্রাকচার সহ) পছন্দ করি।


7

এটি JSON দ্বিতীয় পরামিতি গ্রহণ করবে যা ফাংশনগুলির সাথে সহায়তা করতে পারে - প্রতিস্থাপনকারী , এটি সর্বাধিক মার্জিত উপায়ে রূপান্তরিত করার বিষয়টি সমাধান করে:

JSON.stringify(object, (key, val) => {
    if (typeof val === 'function') {
      return String(val);
    }
    return val;
  });

5

যদি আপনি কেবল স্ট্রিং, অবজেক্টস এবং অ্যারেগুলি সম্পর্কে যত্নশীল হন:

function objectToString (obj) {
        var str = '';
        var i=0;
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if(typeof obj[key] == 'object')
                {
                    if(obj[key] instanceof Array)
                    {
                        str+= key + ' : [ ';
                        for(var j=0;j<obj[key].length;j++)
                        {
                            if(typeof obj[key][j]=='object') {
                                str += '{' + objectToString(obj[key][j]) + (j > 0 ? ',' : '') + '}';
                            }
                            else
                            {
                                str += '\'' + obj[key][j] + '\'' + (j > 0 ? ',' : ''); //non objects would be represented as strings
                            }
                        }
                        str+= ']' + (i > 0 ? ',' : '')
                    }
                    else
                    {
                        str += key + ' : { ' + objectToString(obj[key]) + '} ' + (i > 0 ? ',' : '');
                    }
                }
                else {
                    str +=key + ':\'' + obj[key] + '\'' + (i > 0 ? ',' : '');
                }
                i++;
            }
        }
        return str;
    }

5

stringify-objectইয়োমন টিম দ্বারা নির্মিত একটি ভাল এনপিএম গ্রন্থাগার: https://www.npmjs.com/package/stringify-object

npm install stringify-object

তারপর:

const stringifyObject = require('stringify-object');
stringifyObject(myCircularObject);

স্পষ্টতই এটি আকর্ষণীয় তবেই আপনার যদি বিজ্ঞপ্তিযুক্ত অবজেক্ট থাকে যা ব্যর্থ হয় JSON.stringify();


1
কেন কেউ এমন কোনও কিছুর জন্য এনপিএম মডিউল ব্যবহার করবে, যা সাধারণ জেএস-এ এক-লাইনার দ্বারা অর্জন করা যেতে পারে? কেন কেউ এমনটি করবে তা সম্পর্কে এই উত্তরের বিশদ প্রয়োজন।
জেলফির কালটসটহল

প্রায়শই, একটি lib প্রান্ত ক্ষেত্রে সাহায্য করবে। আমি এটিকে বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সগুলি ব্যবহার করার জন্য ব্যবহার করেছি।
নিকোলাস জোজল

1
এটি আমার ডাউনভোটটি সরিয়ে বিজ্ঞপ্তিযুক্ত অবজেক্টগুলি সম্পর্কে যুক্ত নোটের সাথে আরও সার্থক করে তোলে।
জেলফির কালটস্টল


4

যেহেতু ফায়ারফক্স কিছু বস্তুকে স্ক্রিন অবজেক্ট হিসাবে স্ট্রাইফাই করে না; আপনি যদি একই ফলাফল পেতে চান তবে JSON.stringify(obj):

function objToString (obj) {
    var tabjson=[];
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            tabjson.push('"'+p +'"'+ ':' + obj[p]);
        }
    }  tabjson.push()
    return '{'+tabjson.join(',')+'}';
}


2
var o = {a:1, b:2};

o.toString=function(){
  return 'a='+this.a+', b='+this.b;
};

console.log(o);
console.log('Item: ' + o);

যেহেতু জাভাস্ক্রিপ্ট v1.0 সর্বত্র কাজ করে (এমনকি আইই) এটি একটি স্থানীয় পদ্ধতির এবং এটি ডিবাগ করার সময় এবং উত্পাদনের সময় আপনার অবজেক্টের খুব কস্টোমাইজড চেহারার অনুমতি দেয় Since https://developer.mozilla.org/en/docs/Web/JavaScript/References / Global_Objects / অবজেক্ট / toString

দরকারী উদাহরণ

var Ship=function(n,x,y){
  this.name = n;
  this.x = x;
  this.y = y;
};
Ship.prototype.toString=function(){
  return '"'+this.name+'" located at: x:'+this.x+' y:'+this.y;
};

alert([new Ship('Star Destroyer', 50.001, 53.201),
new Ship('Millennium Falcon', 123.987, 287.543),
new Ship('TIE fighter', 83.060, 102.523)].join('\n'));//now they can battle!
//"Star Destroyer" located at: x:50.001 y:53.201
//"Millennium Falcon" located at: x:123.987 y:287.543
//"TIE fighter" located at: x:83.06 y:102.523

এছাড়াও, বোনাস হিসাবে

function ISO8601Date(){
  return this.getFullYear()+'-'+(this.getMonth()+1)+'-'+this.getDate();
}
var d=new Date();
d.toString=ISO8601Date;//demonstrates altering native object behaviour
alert(d);
//IE6   Fri Jul 29 04:21:26 UTC+1200 2016
//FF&GC Fri Jul 29 2016 04:21:26 GMT+1200 (New Zealand Standard Time)
//d.toString=ISO8601Date; 2016-7-29

2

আপনি যদি লোটাস ব্যবহার করতে পারেন তবে আপনি এটি এইভাবে করতে পারেন:

> var o = {a:1, b:2};
> '{' + _.map(o, (value, key) => key + ':' + value).join(', ') + '}'
'{a:1, b:2}'

লোডাসের সাহায্যে map()আপনি অবজেক্টগুলিতেও পুনরাবৃত্তি করতে পারেন। এটি তার স্ট্রিং প্রতিনিধিত্বের প্রতিটি কী / মান প্রবেশের মানচিত্র করে:

> _.map(o, (value, key) => key + ':' + value)
[ 'a:1', 'b:2' ]

এবং join()অ্যারে এন্ট্রি একসাথে রাখুন।

আপনি যদি ES6 টেম্পলেট স্ট্রিং ব্যবহার করতে পারেন তবে এটিও কাজ করে:

> `{${_.map(o, (value, key) => `${key}:${value}`).join(', ')}}`
'{a:1, b:2}'

দয়া করে মনে রাখবেন এটি অবজেক্টের মাধ্যমে পুনরাবৃত্ত হয় না:

> var o = {a:1, b:{c:2}}
> _.map(o, (value, key) => `${key}:${value}`)
[ 'a:1', 'b:[object Object]' ]

নোডেরutil.inspect() মত কাজগুলি করবে:

> util.inspect(o)
'{ a: 1, b: { c: 2 } }'

1

আপনি যদি ডোজো জাভাস্ক্রিপ্ট কাঠামো ব্যবহার করছেন তবে এটি করার জন্য ইতিমধ্যে একটি ফাংশন তৈরির কাজ রয়েছে: dojo.toJson () যা এরকমভাবে ব্যবহৃত হবে।

var obj = {
  name: 'myObj'
};
dojo.toJson(obj);

যা একটি স্ট্রিং ফিরে আসবে। আপনি যদি জোনস ডেটাতে অবজেক্টটি রূপান্তর করতে চান তবে সত্যের দ্বিতীয় পরামিতি যুক্ত করুন।

dojo.toJson(obj, true);

http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson


1
/*
    This function is as JSON.Stringify (but if you has not in your js-engine you can use this)
    Params:
        obj - your object
        inc_ident - can be " " or "\t".
        show_types - show types of object or not
        ident - need for recoursion but you can not set this parameter.
*/
function getAsText(obj, inc_ident, show_types, ident) {
    var res = "";
    if (!ident)
        ident = "";
    if (typeof(obj) == "string") {
        res += "\"" + obj + "\" ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (typeof(obj) == "number" || typeof(obj) == "boolean") {
        res += obj;
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (obj instanceof Array) {
        res += "[ ";
        res += show_types ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var new_ident = ident + inc_ident;
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + getAsText(obj[key], inc_ident, show_types, new_ident));
        } 
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "]";
    } else {
        var new_ident = ident + inc_ident;      
        res += "{ ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + '"' + key + "\" : " + getAsText(obj[key], inc_ident, show_types, new_ident));
        }
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "}\r\n";
    } 
    return res;
};

ব্যবহারের উদাহরণ:

var obj = {
    str : "hello",
    arr : ["1", "2", "3", 4],
b : true,
    vobj : {
        str : "hello2"
    }
}

var ForReading = 1, ForWriting = 2;
var fso = new ActiveXObject("Scripting.FileSystemObject")
f1 = fso.OpenTextFile("your_object1.txt", ForWriting, true)
f1.Write(getAsText(obj, "\t"));
f1.Close();

f2 = fso.OpenTextFile("your_object2.txt", ForWriting, true)
f2.Write(getAsText(obj, "\t", true));
f2.Close();

your_object1.txt:

{ 
    "str" : "hello" ,
    "arr" : [ 
        "1" ,
        "2" ,
        "3" ,
        4
    ],
    "b" : true,
    "vobj" : { 
        "str" : "hello2" 
    }

}

your_object2.txt:

{ /* typeobj: object*/
    "str" : "hello" /* typeobj: string*/,
    "arr" : [ /* typeobj: object*/
        "1" /* typeobj: string*/,
        "2" /* typeobj: string*/,
        "3" /* typeobj: string*/,
        4/* typeobj: number*/
    ],
    "b" : true/* typeobj: boolean*/,
    "vobj" : { /* typeobj: object*/
        "str" : "hello2" /* typeobj: string*/
    }

}

1
কোডটি কী করবে এবং এটি কীভাবে ব্যবহার করা যায় তার একটি উদাহরণ এটির পক্ষে ভাল এবং ব্যাখ্যা হবে। ধন্যবাদ
estemendoza

1

আপনার উদাহরণ হিসাবে, আমি মনে করি console.log("Item:",o) সবচেয়ে সহজ হবে। কিন্তু, console.log("Item:" + o.toString) কাজ করবে।

এক নম্বর পদ্ধতি ব্যবহার করে কনসোলে একটি দুর্দান্ত ড্রপডাউন ব্যবহার করা হয়, যাতে একটি দীর্ঘ অবজেক্ট সুন্দরভাবে কাজ করবে।


1
function objToString (obj) {
    var str = '{';
    if(typeof obj=='object')
      {

        for (var p in obj) {
          if (obj.hasOwnProperty(p)) {
              str += p + ':' + objToString (obj[p]) + ',';
          }
      }
    }
      else
      {
         if(typeof obj=='string')
          {
            return '"'+obj+'"';
          }
          else
          {
            return obj+'';
          }
      }



    return str.substring(0,str.length-1)+"}";
}

1

আমি আশা করি যে এই উদাহরণটি তাদের সকলের জন্য সহায়তা করবে যারা সমস্ত বস্তুর অ্যারেতে কাজ করছেন

var data_array = [{
                    "id": "0",
                    "store": "ABC"
                },{
                    "id":"1",
                    "store":"XYZ"
                }];
console.log(String(data_array[1]["id"]+data_array[1]["store"]));

1

আপনি যদি অ্যাপ্লেতে অবজেক্টে যোগ দেন ()।

const obj = {one:1, two:2, three:3};
let arr = [];
for(let p in obj)
    arr.push(obj[p]);
const str = arr.join(',');

0

যদি আপনি কোনও ইনলাইন এক্সপ্রেশন টাইপ পরিস্থিতির জন্য কোনও ভেরিয়েবলকে স্ট্রিংয়ে রূপান্তরিত করার একটি ন্যূনতম পদ্ধতি চান ''+variablenameতবে আমি গল্ফ করেছি is

যদি 'ভেরিয়েবলনাম' কোনও বস্তু হয় এবং আপনি খালি স্ট্রিং কনটেনটেশন অপারেশনটি ব্যবহার করেন তবে এটি বিরক্তিকর হবে [object Object], এমন ক্ষেত্রে আপনি সম্ভবত গ্যারি সি এর JSON.stringifyপোস্ট করা প্রশ্নের অত্যন্ত আপত্তিজনক উত্তর চান যা সম্পর্কে আপনি মোজিলার বিকাশকারী নেটওয়ার্কে পড়তে পারেন উপরের উত্তরটিতে লিঙ্কে ।

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