Mengubah objek menjadi string

975

Bagaimana saya bisa mengubah objek JavaScript menjadi string?

Contoh:

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

Keluaran:

Object {a = 1, b = 2} // output yang dapat dibaca sangat bagus :)
Item: [object object] // tidak tahu apa yang ada di dalam :(

pengguna680174
sumber
7
Konversi ke string untuk tujuan apa? Maksud Anda membuat cerita bersambung sehingga Anda dapat membangun objek nanti dari string? Atau hanya untuk pamer?
Shadow Wizard adalah Ear For You
19
Penulis telah pergi dari tahun, tetapi membaca dalam pikiran, setelah bertahun-tahun, saya kira, titik masuk untuk masalah ini adalah console.log (obj), yang menampilkan objek dengan properti, sedangkan console.log ('obj:' + obj ) bekerja sebaliknya membingungkan.
Danubian Sailor
2
tidak bisa menerapkan add dua objek, Jika kita bisa melakukannya tidak akan ada perbedaan dalam tipe nilai dan tipe ref.
Nishant Kumar
12
var o = {a: 1, b: 2}; console.log ('Item:' + JSON.stringify (o))
Nishant Kumar
22
Jika itu untuk konsol, saya akan merekomendasikan melakukannya console.log("Item", obj);. Tidak perlu sesuatu yang rumit.
soktinpk

Jawaban:

1333

Saya akan merekomendasikan menggunakan JSON.stringify, yang mengubah set variabel dalam objek ke string JSON. Sebagian besar browser modern mendukung metode ini secara asli, tetapi bagi yang tidak, Anda dapat menyertakan versi JS :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);
Gary Chambers
sumber
7
Untuk referensi IE6 dan 7 tidak mendukung ini. IE6 bukan masalah besar karena sangat sedikit pengguna, dan kampanye aktif untuk membunuhnya ... tetapi masih ada beberapa pengguna IE7 di luar sana (tergantung pada basis pengguna Anda).
MikeMurko
30
Saya mendapatkan "UnEught TypeError: Konversi struktur melingkar ke JSON". Bahkan jika ada referensi melingkar, saya masih ingin melihat representasi string dari objek saya. Apa yang dapat saya?
Pascal Klein
26
Ini tidak bekerja jika objek memiliki properti fungsi, misalnya: foo: function () {...}.
Brock Adams
2
Tautan ke perpustakaan JSON tidak berfungsi jika diklik dari StackOverflow. Salin dan tempel di bilah alamat.
f.ardelian
1
Anda dapat menggunakan JSON.stringify(obj, null, 2);untuk hasil yang lebih cantik.
l.poellabauer
126

Gunakan fungsi String javascript ()

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

atau stringify ()

JSON.stringify(yourobject)
Vikram Pote
sumber
28
var foo = {bar: 1}; String (foo); -> "[objek objek]"
Anti Veeranna
1
var foo = {bar: 1}; String (foo ['bar']); -> "1"
Vikram Pote
3
Jika Anda ingin seluruh objek sebagai string, gunakan JSON.stringify (foo)
Vikram Pote
8
JSON.stringify(yourobject)pembantu hari saya!
Neurotransmitter
1
@TranslucentCloud * made
Parampal Pooni
87

Tentu, untuk mengubah objek menjadi string, Anda harus menggunakan metode Anda sendiri, seperti:

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

Sebenarnya, di atas hanya menunjukkan pendekatan umum; Anda mungkin ingin menggunakan sesuatu seperti http://phpjs.org/functions/var_export=78 atau http://phpjs.org/functions/var_dump:604

atau, jika Anda tidak menggunakan metode (berfungsi sebagai properti dari objek Anda), Anda mungkin dapat menggunakan standar baru (tetapi tidak diterapkan di browser lama, meskipun Anda dapat menemukan utilitas untuk membantu menggunakannya untuk mereka juga), JSON .stringify (). Tetapi sekali lagi, itu tidak akan berfungsi jika objek menggunakan fungsi atau properti lain yang tidak serial ke JSON.

Brett Zamir
sumber
78

Dengan menjaganya tetap sederhana console, Anda bisa menggunakan koma alih-alih a +. Itu+ akan mencoba untuk mengubah objek ke dalam string, sedangkan koma akan menampilkannya secara terpisah di konsol.

Contoh:

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

Keluaran:

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

Referensi: https://developer.mozilla.org/en-US/docs/Web/API/Console.log

Luke
sumber
Solusi Greate! Tetapi bisakah Anda memberi tahu saya apa yang terjadi di balik layar ketika Anda melakukan ini console.log(o):? Karena jika Anda mencoba untuk log objek yang ditambahkan ke string, itu sebenarnya memanggil toString()objek.
Gocy015
1
console.logpada akhirnya menyebut sesuatu yang disebut Printerspesifikasi sebagai: "Bagaimana implementasi mencetak args tergantung pada implementasi" - artinya setiap browser dapat melakukan hal yang berbeda ini (lihat console.spec.whatwg.org/#printer ). Firefox akan menampilkan objek sebagai string, tetapi diwarnai dengan baik. Chrome akan menampilkan objek sebagai grup interaktif yang dapat Anda kembangkan untuk melihat properti. Cobalah!
Lukas
2
Trik yang sangat bagus dan mungkin bagus untuk browser web modern, tetapi tidak 100% andal untuk semua implementasi JS. misalnya dalam Qt QML, yang mengimplementasikan mesin JS, output untuk console.log('Item: ', o);masih Item: [object Object].
Paul Masri-Stone
Alih-alih console.logAnda dapat menggunakan console.dir(o)untuk mencetak objek javascript alih-alih mencetaknya sebagai string. Dalam alat pengembang ini memungkinkan untuk membuka objek dan memeriksa semua properti, bahkan array. (lihat: developer.mozilla.org/de/docs/Web/API/Console/dir )
EagleT
37

EDIT Jangan gunakan jawaban ini karena tidak berfungsi di Internet Explorer. Gunakan solusi Gary Chambers .

toSource () adalah fungsi yang Anda cari yang akan menuliskannya sebagai JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());
Gazler
sumber
6
Meskipun nyaman untuk debugging di Firefox, toSource()tidak berfungsi di IE.
Brett Zamir
4
toSource()bukan standar yang dikenali, jadi tidak dapat dijamin didukung di semua browser.
Gary Chambers
11
Ahh, terima kasih sudah menunjukkannya. Saya akan meninggalkan jawaban saya di sini untuk orang lain yang tidak menyadarinya.
Gazler
Saya berharap saya bisa lebih meningkatkan Anda, karena ini adalah solusi brilian untuk lingkungan yang memiliki javascript (tetapi konsol log tidak nyaman / tidak mungkin diakses).
Zack Morris
Anda dapat memberikan polipill ke toSource: github.com/oliver-moran/toSource.js/blob/master/toSource.js
roland
32

Satu pilihan :

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

o dicetak sebagai string

Opsi lain (seperti yang ditunjukkan oleh soktinpk di komentar), dan lebih baik untuk konsol debugging IMO:

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

o dicetak sebagai objek, yang dapat Anda telusuri jika Anda memiliki lebih banyak bidang

nabn
sumber
22

Tidak ada solusi di sini yang berfungsi untuk saya. JSON.stringify tampaknya seperti yang dikatakan banyak orang, tetapi memotong fungsi dan tampaknya cukup rusak untuk beberapa objek dan array yang saya coba saat mengujinya.

Saya membuat solusi sendiri yang paling tidak berfungsi di Chrome. Posting di sini sehingga siapa pun yang melihat ini di Google dapat menemukannya.

//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("")
}

EDIT: Saya tahu kode ini dapat ditingkatkan tetapi tidak pernah sempat melakukannya. Pengguna andrey menyarankan peningkatan di sini dengan komentar:

Berikut adalah sedikit kode yang diubah, yang dapat menangani 'null' dan 'undefined', dan juga tidak menambahkan koma yang berlebihan.

Gunakan itu dengan risiko Anda sendiri karena saya belum memverifikasi sama sekali. Jangan ragu untuk menyarankan perbaikan tambahan sebagai komentar.

Penghuni rumah
sumber
Anda melewatkan beberapa '}
dacopenhagen
2
Kode yang sangat bagus, tetapi ada jejak ,di akhir setiap objek / array.
NiCk Newman
ini adalah jawaban terbaik
Roman
20

Jika Anda hanya keluaran ke konsol, Anda dapat menggunakan console.log('string:', obj). Perhatikan koma .

Alexandre R. Janini
sumber
Ini menimbulkan masalah dalam skenario di mana AJAX dan ditunda datang untuk bermain - output dari console.logsering ditampilkan setelah AJAX selesai memasok array dengan data secara paralel, yang mengarah pada hasil yang menyesatkan. Dalam kasus seperti itu objek kloning atau serialisasi adalah jalannya: karena kita mencatat objek duplikat, bahkan ketika AJAX menyelesaikan pekerjaannya, ia akan mengisi data "lama".
tanggal
18

Dalam kasus di mana Anda tahu objek hanyalah Boolean, Date, String, number dll ... Fungsi javascript String () berfungsi dengan baik. Baru-baru ini saya menemukan ini berguna dalam berurusan dengan nilai-nilai yang berasal dari fungsi $ .each jquery.

Misalnya, yang berikut ini akan mengonversi semua item dalam "nilai" menjadi string:

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

Lebih detail di sini:

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

Jake Drew
sumber
Atauvar my_string = ''+value+'';
John Magnolia
1
Bekerja untukku. Saya lebih suka solusi ini karena saya tidak akan menggunakan plugin untuk tugas yang begitu sederhana.
Tillito
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);
cerah rai
sumber
12

Saya mencari ini, dan menulis yang rekursif mendalam dengan lekukan:

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();
  }
}

Penggunaan: objToString({ a: 1, b: { c: "test" } })

SylvainPV
sumber
perhatikan bahwa jika Anda ingin mencegah loop tak terbatas untuk objek dengan referensi melingkar, Anda dapat menambahkan if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }fungsi, dengan MAX_DEPTH_LEVEL menjadi jumlah maksimum lapisan objek yang Anda gali.
SylvainPV
11

Jika Anda hanya ingin melihat objek untuk debugging, Anda bisa menggunakan

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

1.

JSON.stringify(o);

Item: {"a": "1", "b": "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);

Item: {a: 1, b: 2}

vacsati
sumber
1
Akan lebih baik jika Anda mempertimbangkan untuk menambahkan lebih detail tentang jawaban Anda.
Harun Diluka Heshan
8

Metode JSON cukup kalah dengan mesin Gecko .toSource () primitif.

Lihat respons artikel SO untuk tes perbandingan.

Juga, jawaban di atas mengacu pada http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-ie-386109.html yang, seperti JSON, (yang artikel lainnya http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json menggunakan via "ExtJs JSON encode source code" ) tidak dapat menangani referensi melingkar dan tidak lengkap. Kode di bawah ini menunjukkan batasannya (spoof) (dikoreksi untuk menangani array dan objek tanpa konten).

( tautan langsung ke kode di //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )

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'));

yang menampilkan:

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")]

dan

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")]

dan

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]
Ekim
sumber
8

Sebenarnya ada satu opsi mudah (untuk browser terbaru dan Node.js) yang hilang dalam jawaban yang ada:

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

Saya lebih suka ini karena JSON.stringify()memiliki keterbatasan tertentu (misalnya dengan struktur lingkaran).

Christian Gawron
sumber
7

Tampaknya JSON menerima parameter kedua yang dapat membantu fungsi - replacer , ini memecahkan masalah konversi dengan cara yang paling elegan:

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

Jika Anda hanya peduli dengan string, objek, dan array:

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;
    }
Anuraag Vaidya
sumber
5

stringify-objectadalah pustaka npm yang baik yang dibuat oleh tim yeoman: https://www.npmjs.com/package/stringify-object

npm install stringify-object

kemudian:

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

Jelas itu menarik hanya jika Anda memiliki objek lingkaran yang akan gagal dengannya JSON.stringify();

Nicolas Zozol
sumber
1
Mengapa ada orang yang menggunakan modul NPM untuk sesuatu seperti ini, yang dapat dicapai dengan satu-liner di JS polos? Jawaban ini perlu perincian tentang mengapa ada orang yang melakukannya.
Zelphir Kaltstahl
Seperti sering, lib akan membantu dalam kasus tepi. Saya menggunakannya untuk berurusan dengan referensi melingkar.
Nicolas Zozol
1
Ini lebih masuk akal dengan catatan tambahan tentang objek melingkar, menghapus downvote saya.
Zelphir Kaltstahl
4

Lihatlah plugin jQuery-JSON

Pada intinya, ia menggunakan JSON.stringify tetapi kembali ke parsernya sendiri jika browser tidak mengimplementasikannya.

Evan Plaice
sumber
4

Karena firefox tidak mengencangkan beberapa objek sebagai objek layar; jika Anda ingin memiliki hasil yang sama seperti 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(',')+'}';
}
Abdennour TOUMI
sumber
4

Untuk objek yang tidak bersarang:

Object.entries(o).map(x=>x.join(":")).join("\r\n")
Alex Szücs
sumber
2
var o = {a:1, b:2};

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

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

Karena Javascript v1.0 bekerja di mana-mana (bahkan IE), ini adalah pendekatan asli dan memungkinkan tampilan objek Anda yang sangat costomised saat debugging dan dalam produksi https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Object / toString

Contoh yang bermanfaat

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

Juga, sebagai bonus

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
Alex
sumber
2

Jika Anda dapat menggunakan lodash, Anda dapat melakukannya dengan cara ini:

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

Dengan lodash map()Anda dapat beralih di atas Object juga. Ini memetakan setiap entri kunci / nilai ke representasi stringnya:

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

Dan join()menempatkan entri array.

Jika Anda dapat menggunakan String Template ES6, ini juga berfungsi:

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

Harap dicatat bahwa ini tidak bersifat rekursif melalui Object:

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

Seperti yangutil.inspect() akan dilakukan simpul :

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

Jika Anda menggunakan kerangka kerja javascript Dojo maka sudah ada fungsi build in untuk melakukan ini: dojo.toJson () yang akan digunakan seperti itu.

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

yang akan mengembalikan sebuah string. Jika Anda ingin mengonversi objek menjadi data json, tambahkan parameter kedua true.

dojo.toJson(obj, true);

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

Chris O'Connell
sumber
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;
};

contoh untuk digunakan:

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*/
    }

}
laut-kg
sumber
1
Akan bagus dan penjelasan tentang apa yang dilakukan kode dan contoh bagaimana menggunakannya. Terima kasih
estemendoza
1

Sebagai contoh Anda, saya pikir console.log("Item:",o) akan lebih mudah. Tapi, console.log("Item:" + o.toString) pasti juga berhasil.

Menggunakan metode nomor satu menggunakan dropdown yang bagus di konsol, jadi objek yang panjang akan bekerja dengan baik.

Fuzzyzilla
sumber
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)+"}";
}
Mauro
sumber
1

Saya harap contoh ini akan membantu bagi semua orang yang bekerja pada array objek

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

Jika Anda tidak ingin bergabung () ke Obyek.

const obj = {one:1, two:2, three:3};
let arr = [];
for(let p in obj)
    arr.push(obj[p]);
const str = arr.join(',');
Илья Индиго
sumber
0

Jika Anda menginginkan metode minimalis untuk mengonversi variabel menjadi string untuk situasi tipe ekspresi inline, ''+variablenameadalah yang terbaik yang saya mainkan.

Jika 'variablename' adalah sebuah objek dan Anda menggunakan operasi penggabungan string kosong, itu akan memberikan hal yang menjengkelkan [object Object], dalam hal ini Anda mungkin ingin JSON.stringifyjawaban Gary C. yang sangat tervotifikasi untuk pertanyaan yang diposting, yang dapat Anda baca di Jaringan Pengembang Mozilla di tautan dalam jawaban di atas .

stackuser83
sumber