किसी वस्तु को स्ट्रिंग में बदलना


974

मैं एक जावास्क्रिप्ट ऑब्जेक्ट को एक स्ट्रिंग में कैसे बदल सकता हूं?

उदाहरण:

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

आउटपुट:

ऑब्जेक्ट {a = 1, b = 2} // बहुत अच्छा पठनीय आउटपुट :)
आइटम: [ऑब्जेक्ट ऑब्जेक्ट] // कोई विचार नहीं है कि अंदर क्या है :(


7
स्ट्रिंग को किस उद्देश्य में बदलें? आपका मतलब है कि आप क्रमबद्ध करें ताकि आप बाद में स्ट्रिंग से ऑब्जेक्ट का निर्माण कर सकें? या सिर्फ प्रदर्शन के लिए?
शैडो विजार्ड इयर फॉर यू यू

19
लेखक वर्षों से चला गया है, लेकिन ध्यान में रखते हुए, वर्षों के बाद, मुझे लगता है, समस्या के लिए प्रविष्टि बिंदु कंसोल था। (obj), जो गुणों के साथ ऑब्जेक्ट प्रदर्शित करता है, जबकि कंसोल .log ('obj:' + obj) ) अन्यथा अक्षमता से काम करता है।
दानूबियन नाविक

2
बस दो ऑब्जेक्ट नहीं जोड़ सकते हैं, अगर हम ऐसा कर सकते हैं तो मूल्य प्रकार और रेफरी प्रकार में कोई अंतर नहीं होगा।
निशांत कुमार

12
var o = {a: 1, b: 2}; कंसोल.लॉग ('आइटम:' + JSON.stringify (ओ))
निशांत कुमार

22
यदि यह कंसोल के लिए है, तो मैं करने की सलाह दूंगा console.log("Item", obj);। कुछ भी जटिल की जरूरत नहीं है।
सोक्टिनपेक

जवाबों:


1332

मैं उपयोग करने की सलाह दूंगा JSON.stringify, जो चर के सेट को ऑब्जेक्ट में JSON स्ट्रिंग में परिवर्तित करता है। अधिकांश आधुनिक ब्राउज़र मूल रूप से इस पद्धति का समर्थन करते हैं, लेकिन जो नहीं करते हैं, उनके लिए आप एक जेएस संस्करण शामिल कर सकते हैं :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

7
संदर्भ के लिए IE6 और 7 इसका समर्थन नहीं करते हैं। IE6 बहुत कम उपयोगकर्ताओं के कारण एक बड़ा सौदा नहीं है, और इसे मारने के लिए एक सक्रिय अभियान ... लेकिन अभी भी काफी कुछ IE7 उपयोगकर्ता हैं (आपके उपयोगकर्ता आधार पर निर्भर करता है)।
मिकमर्को

30
मुझे एक "अनकॉस्ट टाइप टाइप: जोंस में सर्कुलर स्ट्रक्चर को बदलना" मिलता है। यहां तक ​​कि अगर एक परिपत्र संदर्भ है, तो भी मैं अपनी वस्तु का एक स्ट्रिंग-प्रतिनिधित्व देखना चाहूंगा। मैं क्या कर सकता हूँ?
पास्कल क्लेन

26
यह काम नहीं करता है यदि ऑब्जेक्ट में फ़ंक्शन गुण है, जैसे foo: function () {...}:।
ब्रॉक एडम्स

2
StackOverflow से क्लिक करने पर JSON लाइब्रेरी से लिंक काम नहीं करता है। इसे एड्रेस बार में कॉपी और पेस्ट करें।
f.ardelian

1
आप JSON.stringify(obj, null, 2);प्रीटियर आउटपुट के लिए उपयोग कर सकते हैं ।
l.poellabauer

126

जावास्क्रिप्ट स्ट्रिंग () फ़ंक्शन का उपयोग करें

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

या कठोर ()

JSON.stringify(yourobject)

28
var फू = {बार: 1}; स्ट्रिंग (foo); -> "[वस्तु वस्तु]"
एंटी वीराना

1
var फू = {बार: 1}; स्ट्रिंग (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/functions/var_export to78 या http://phpjs.org/functions/var_dump:604 जैसे कुछ का उपयोग करने की इच्छा कर सकते हैं

या, यदि आप तरीकों (अपनी वस्तु के गुणों के रूप में कार्य) का उपयोग नहीं कर रहे हैं, तो आप नए मानक का उपयोग करने में सक्षम हो सकते हैं (लेकिन पुराने ब्राउज़रों में इसे लागू नहीं किया जा सकता है, हालांकि आप उनके लिए भी इसकी सहायता के लिए एक उपयोगिता पा सकते हैं), JSON .stringify ()। लेकिन फिर से, यह काम नहीं करेगा यदि ऑब्जेक्ट फ़ंक्शन या अन्य गुणों का उपयोग करता है जो JSON के लिए उपलब्ध नहीं हैं।


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


Greate समाधान! लेकिन क्या आप मुझे बता सकते हैं कि जब आप बस ऐसा करते हैं तो पर्दे के पीछे क्या होता है console.log(o):? यदि आप किसी स्ट्रिंग में जोड़े गए ऑब्जेक्ट को लॉग करने का प्रयास करते हैं, तो यह वास्तव toString()में ऑब्जेक्ट पर कॉल करता है।
गोकिया ने

1
console.logअंततः कुछ को कॉल करता है जिसे Printerकल्पना नोट कहा जाता है : "कार्यान्वयन प्रिंट कैसे लागू होता है" - इसका अर्थ है कि प्रत्येक ब्राउज़र यह अलग कर सकता है ( कंसोल देखें ।spec.whatwg.org/#printer )। फ़ायरफ़ॉक्स एक स्ट्रिंग के रूप में वस्तुओं को प्रदर्शित करेगा, लेकिन अच्छी तरह से रंगीन। Chrome ऑब्जेक्ट को एक इंटरैक्टिव समूह के रूप में प्रदर्शित करेगा जिसे आप गुणों को देखने के लिए विस्तारित कर सकते हैं। कोशिश करो!
ल्यूक

2
आधुनिक वेब ब्राउजर के लिए बहुत अच्छी चाल और शायद ठीक है, लेकिन यह सभी जेएस कार्यान्वयनों के लिए 100% विश्वसनीय नहीं है। जैसे Qt QML में, जो JS इंजन को लागू करता है, उसके लिए आउटपुट console.log('Item: ', o);अभी भी है Item: [object Object]
पॉल मसरी-स्टोन

इसके बजाय console.logआप console.dir(o)इसे एक स्ट्रिंग के रूप में प्रिंट करने के बजाय जावास्क्रिप्ट ऑब्जेक्ट को प्रिंट करने के लिए उपयोग कर सकते हैं । डेवलपर टूल में यह ऑब्जेक्ट को खोलने और सभी संपत्तियों की जांच करने में सक्षम बनाता है, यहां तक ​​कि एरेज़ भी। (देखें: developer.mozilla.org/de/docs/Web/API/Console/dir )
ईगल टीटी

37

EDIT इस उत्तर का उपयोग न करें क्योंकि यह Internet Explorer में काम नहीं करता है। गैरी चेम्बर्स समाधान का उपयोग करें ।

.Source () वह फ़ंक्शन है जिसे आप देख रहे हैं जो इसे JSON के रूप में लिखेगा।

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

6
यद्यपि यह फ़ायरफ़ॉक्स में डिबगिंग के लिए सुविधाजनक है, toSource()IE में काम नहीं करता है।
ब्रेट ज़मीर

4
toSource()एक मान्यता प्राप्त मानक नहीं है, इसलिए सभी ब्राउज़रों में समर्थित होने की गारंटी नहीं दी जा सकती है।
गैरी चेम्बर्स

11
आह, यह इंगित करने के लिए धन्यवाद। मैं अपना जवाब यहाँ दूसरों के लिए छोड़ दूँगा जो इससे अनजान हैं।
गजलर

मेरी इच्छा है कि मैं आपको और बढ़ा दूं, क्योंकि यह उन परिवेशों के लिए एक शानदार समाधान है जिनके पास जावास्क्रिप्ट है (लेकिन कंसोल लॉग असुविधाजनक है / उपयोग करने के लिए असंभव है)।
ज़ैक मॉरिस

: आप toSource करने के लिए एक polypill प्रदान कर सकता है github.com/oliver-moran/toSource.js/blob/master/toSource.js
रॉलेंड

32

एक विकल्प :

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

o एक स्ट्रिंग के रूप में मुद्रित होता है

एक अन्य विकल्प (जैसा कि soktinpk ने टिप्पणी में बताया है), और कंसोल डिबगिंग IMO के लिए बेहतर है:

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

o एक ऑब्जेक्ट के रूप में प्रिंट किया जाता है, जिसे आप अधिक फ़ील्ड होने पर ड्रिल कर सकते हैं


22

यहां किसी भी समाधान ने मेरे लिए काम नहीं किया। JSON.stringify से लगता है कि बहुत सारे लोग क्या कहते हैं, लेकिन यह फ़ंक्शन को काट देता है और कुछ वस्तुओं और सरणियों के लिए बहुत ही टूटा हुआ लगता है जो मैंने इसे परीक्षण करते समय कोशिश की थी।

मैंने अपना एक समाधान बनाया जो कम से कम क्रोम में काम करता है। इसे यहां पोस्ट करना ताकि कोई भी व्यक्ति इसे Google पर देख सके वह इसे पा सकता है।

//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
dacopenhagen

2
बहुत अच्छा कोड है, लेकिन ,प्रत्येक वस्तु / सरणी के अंत में एक अनुगामी है ।
NiCk न्यूमैन

इसका सबसे अच्छा जवाब है
रोमन

20

यदि आप केवल कंसोल में आउटपुट कर रहे हैं, तो आप उपयोग कर सकते हैं console.log('string:', obj)अल्पविराम पर ध्यान दें ।


यह उन परिदृश्यों में समस्या उत्पन्न करता है जहां AJAX और आस्थगित खेलना आता है - AJAX द्वारा समानांतर रूप से डेटा के साथ सरणी की आपूर्ति समाप्त करने के बाद आउटपुट console.logको अक्सर प्रदर्शित किया जाता है, जिससे भ्रामक परिणाम होते हैं। ऐसे मामलों में क्लोनिंग या ऑब्जेक्ट को क्रमबद्ध करना जाने का तरीका है: चूंकि हमने डुप्लिकेट ऑब्जेक्ट को लॉग किया था, तब भी जब AJAX अपना काम पूरा करता है, तो यह "पुराना" डेटा भर देगा।
rr-

18

जिन मामलों में आप जानते हैं कि वस्तु सिर्फ एक बूलियन, दिनांक, स्ट्रिंग, संख्या आदि है ... जावास्क्रिप्ट स्ट्रिंग () फ़ंक्शन ठीक काम करता है। मैंने हाल ही में jquery के $ .each फ़ंक्शन से आने वाले मूल्यों से निपटने में इसे उपयोगी पाया।

उदाहरण के लिए, निम्नलिखित सभी वस्तुओं को "मूल्य" में एक स्ट्रिंग में बदल देगा:

$.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" } })


ध्यान दें कि यदि आप गोलाकार संदर्भ वाली वस्तुओं के लिए अनंत छोरों को रोकना चाहते हैं, तो आप 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);

आइटम: {"ए": "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);

आइटम: {a: 1, b: 2}


1
बेहतर होगा कि आप अपने उत्तर के बारे में अधिक जानकारी जोड़ने पर विचार करें।
हरुन दिलुका हशन

8

JSON विधियाँ गेको इंजन से बहुत हीन हैं .toSource () आदिम।

तुलना परीक्षणों के लिए SO लेख प्रतिक्रिया देखें ।

इसके अलावा, उपरोक्त उत्तर 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/ ... / tosource-with-arrays-in-ie-38616 में कोड का सीधा लिंक )

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

मौजूदा उत्तरों में वास्तव में एक आसान विकल्प (हाल के ब्राउज़रों और Node.js के लिए) गायब है:

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
कोई व्यक्ति एनपीएम मॉड्यूल का उपयोग इस तरह की चीज़ के लिए क्यों करेगा, जिसे सादा जेएस के वन-लाइनर द्वारा प्राप्त किया जा सकता है? इस उत्तर के बारे में विवरण की आवश्यकता है कि कोई भी ऐसा क्यों करेगा।
ज़ेल्फिर कल्टस्टाल

जैसा कि अक्सर होता है, एक दायित्व धार मामले में मदद करेगा। मैंने इसका उपयोग परिपत्र संदर्भों से निपटने के लिए किया।
निकोलस ज़ोज़ोल

1
यह गोलाकार वस्तुओं के बारे में जोड़े गए नोट के साथ अधिक समझ में आता है, मेरे डाउनवोट को हटा देता है।
ज़ेल्फिर कल्टस्टाल

4

JQuery-JSON प्लगइन पर एक नज़र डालें

इसके मूल में, यह JSON.stringify का उपयोग करता है लेकिन यदि ब्राउज़र इसे लागू नहीं करता है तो अपने स्वयं के पार्सर पर वापस आ जाता है।


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 हर जगह काम करता है (यहां तक कि आईई) इस एक देशी दृष्टिकोण है और जब तक डिबगिंग और अपने वस्तु की एक बहुत ही costomised देखने के लिए अनुमति देता है उत्पादन में https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / 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 जावास्क्रिप्ट फ्रेमवर्क का उपयोग कर रहे हैं तो ऐसा करने के लिए पहले से ही एक फंक्शन है: dojo.toJson () जो इस तरह से इस्तेमाल किया जाएगा।

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

जो एक स्ट्रिंग लौटाएगा। यदि आप ऑब्जेक्ट को json डेटा में कनवर्ट करना चाहते हैं तो true का दूसरा पैरामीटर जोड़ें।

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तो सबसे अच्छा है जिसे मैंने गोल्फ दिया है।

यदि 'वैरब्लैनमे' एक वस्तु है और आप खाली स्ट्रिंग कॉन्सेप्टेशन ऑपरेशन का उपयोग करते हैं, तो यह कष्टप्रद होगा [object Object], जिस स्थिति में आप गैरी सी JSON.stringifyको पोस्ट किए गए सवाल का भारी उत्तर देना चाहते हैं, जिसे आप मोज़िला के डेवलपर नेटवर्क के बारे में पढ़ सकते हैं। शीर्ष पर उस उत्तर में लिंक पर

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