Converter um objeto em uma string

Como converter objeto javascript em string?

Exemplo:

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

Conclusão:

Objeto {a = 1, b = 2} // muito boa saída legível :)
Item: [Objeto objeto] // Eu não sei o que está dentro: (

835
10 апр. definir por user680174 em 10 de abr 2011-04-10 18:35 '11 às 18:35 2011-04-10 18:35
@ 30 respostas

Eu recomendaria o uso de JSON.stringify , que converte um conjunto de variáveis ​​em um objeto em uma string JSON. A maioria dos navegadores modernos suporta esse método inicialmente, mas, para aqueles que não o fazem, você pode ativar a versão JS :

 var obj = { name: 'myObj' }; JSON.stringify(obj); 
1190
10 апр. Resposta dada por Gary Chambers em 10 de abr 2011-04-10 18:44 '11 às 18:44 2011-04-10 18:44

Use a função javascript String ().

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

ou

border=0
 JSON.stringify(yourobject) 

,

86
15 апр. a resposta é dada por Vikram Pote 15 abr 2016-04-15 14:07 '16 às 14:07 2016-04-15 14:07

Obviamente, para converter um objeto em uma string, você deve usar seu próprio método, por exemplo:

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

Na verdade, o acima simplesmente mostra uma abordagem geral; Você pode usar algo como http://phpjs.org/functions/var_exportium78 ou http://phpjs.org/functions/var_dump:604

ou, se você não usar métodos (funções como propriedades de seu objeto), você pode usar o novo padrão (mas não implementado em navegadores mais antigos, embora você possa encontrar um utilitário útil para ajudá-lo também), JSON.stringify (). Mas, novamente, isso não funciona se o objeto usar funções ou outras propriedades que não podem ser serializadas para JSON.

84
10 апр. Resposta dada por Brett Zamir 10 de abril 2011-04-10 18:49 '11 às 18:49 2011-04-10 18:49

Mantendo a simplicidade com o console , você pode simplesmente usar uma vírgula ao invés de + . + tentará converter o objeto em uma string, enquanto a vírgula irá exibi-lo separadamente no console.

Exemplo:

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

Conclusão:

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

Link: https://developer.mozilla.org/pt-BR/docs/Web/API/Console.log

68
07 янв. Responder Luke 07 Jan 2015-01-07 19:23 '15 às 19:23 2015-01-07 19:23

EDIT Não use esta resposta porque não funciona no Internet Explorer. Use a solução de Gary Chambers .

toSource () é a função que você está procurando para escrever como JSON.

 var object = {}; object.first = "test"; object.second = "test2"; alert(object.toSource()); 
32
10 апр. Resposta dada por Gazler em 10 Abr 2011-04-10 18:40 '11 às 18:40 2011-04-10 18:40

Uma opção :

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

2019

29
19 июня '15 в 8:42 2015-06-19 08:42 a resposta é dada nabn 19 de junho de '15 às 8:42 2015-06-19 08:42

Nenhuma das soluções funcionou aqui. JSON.stringify é semelhante ao que muitos dizem, mas corta funções e parece bastante quebrado para alguns dos objetos e matrizes que tentei ao testar.

Tomei minha decisão que funciona no Chrome, pelo menos. Navegando aqui para que qualquer pessoa que o veja no Google possa encontrá-lo.

 //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: Eu sei que esse código pode ser melhorado, mas simplesmente não tem tempo para fazê-lo. Andrey sugeriu uma melhoria aqui com um comentário:

Aqui está um código ligeiramente modificado que pode manipular "null" e "undefined", e também não adicionar vírgulas excessivas.

Use-o por sua conta e risco, já que eu não verifiquei nada. Sinta-se à vontade para sugerir melhorias adicionais como comentário.

20
22 авг. A resposta é dada por Houshalter 22 ago. 2013-08-22 01:44 '13 às 1:44 2013-08-22 01:44

Se você acabou de enviar para o console, você pode usar console.log('string:', obj) . Observe a vírgula .

18
14 авг. Resposta dada por Alexandre R. Janini 14 ago. 2014-08-14 15:53 '14 às 15:53 2014-08-14 15:53

Onde você sabe que o objeto é apenas booleano, Data, String, número, etc. A função javascript String () funciona bem. Eu recentemente achei isso útil ao trabalhar com valores vindos da função jquery $ .each.

Por exemplo, a seguinte conversão de todos os elementos em "value" em uma string:

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

Leia mais aqui:

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

14
11 июля '13 в 7:12 2013-07-11 07:12 a resposta é dada por Jake Drew 11 de julho, '13 às 7:12 am 2013-07-11 07:12
 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); 
13
08 мая '17 в 15:06 2017-05-08 15:06 a resposta é dada rai ensolarado 08 maio '17 em 15:06 2017-05-08 15:06

Eu procurei por ele e escrevi profundamente recursivo com recuo:

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

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

10
19 нояб. SylvainPV respondeu a 19 de novembro 2014-11-19 01:57 '14 às 1:57 2014-11-19 01:57

Se você quer apenas ver o objeto para depuração, você pode usar

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

Os métodos JSON são muito inferiores ao primitivo Gecko.toSource ().

Para testes comparativos, consulte a resposta do artigo SO .

Além disso, a resposta acima se refere a http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html , que, como o JSON, (que é outro artigo http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json usa o “Código Fonte do Código JSON ExtJs” ) não pode manipular referências circulares e está incompleto. O código abaixo mostra as restrições (falsificações) (corrigidas para manipular matrizes e objetos sem conteúdo).

( link direto para o código em //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=(str.length>2?str.substring(0, str.length-2):str)+( (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')); 

que exibe:

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

e

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

e

 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] 
6
20 апр. Ekim respondeu em 20 de abril 2011-04-20 03:27 '11 às 3:27 2011-04-20 03:27

Porque o firefox não constrói nenhum objeto como um objeto de exibição; se você quiser ter o mesmo resultado de: 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(',')+'}'; } 
4
29 июля '13 в 16:17 2013-07-29 16:17 a resposta é dada por Abdennour TOUMI 29 de julho, 13 às 16:17

stringify-object é uma boa biblioteca npm criada pelo comando yeoman: https://www.npmjs.com/package/stringify-object

 npm install stringify-object 

então:

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

Obviamente, isso é interessante apenas se você tiver um objeto circular que falhará com JSON.stringify();

3
29 дек. a resposta é dada por Nicolas Zozol 29 dez. 2017-12-29 22:23 '17 às 10:23 pm 2017-12-29 22:23

Se você se importa apenas com strings, objetos e matrizes:

 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; } 
3
11 окт. A resposta é dada por Anuraag Vaidya em 11 de outubro. 2015-10-11 15:28 '15 às 15:28 2015-10-11 15:28

Dê uma olhada no plugin jQuery-JSON

Em seu núcleo, ele usa JSON.stringify, mas retorna ao seu analisador se o navegador não o implementar.

3
01 мая '12 в 20:08 2012-05-01 20:08 a resposta é dada por Evan Plaice 01 May '12 at 20:08 2012-05-01 20:08
 var o = {a:1, b:2}; o.toString=function(){ return 'a='+this.a+', b='+this.b; }; console.log(o); console.log('Item: ' + o); 

Desde que o Javascript v1.0 funciona em todos os lugares (mesmo IE) é uma abordagem proprietária e permite uma aparência muito costomised de seu objeto durante a depuração e produção https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/ Objeto / toString

Exemplo útil

 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 

Além disso, como bônus

 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 Fri Jul 29 2016 04:21:26 GMT+1200 (New Zealand Standard Time) //d.toString=ISO8601Date; 2016-7-29 
2
28 июля '16 в 19:55 2016-07-28 19:55 a resposta é dada Alex 28 de julho de '16 às 19:55 2016-07-28 19:55
  function getAsText(obj, inc_ident, show_types, ident) { var res = ""; if (!ident) ident = ""; if (typeof(obj) == "string") { res += "\"" + obj + "\" "; res += (show_types == true) ? "" : ""; } else if (typeof(obj) == "number" || typeof(obj) == "boolean") { res += obj; res += (show_types == true) ? "" : ""; } else if (obj instanceof Array) { res += "[ "; res += show_types ? "" : ""; 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) ? "" : ""; 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; }; 

exemplo de uso:

 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:

 {  "str" : "hello" , "arr" : [  "1" , "2" , "3" , 4 ], "b" : true, "vobj" : {  "str" : "hello2"  } } 
1
18 сент. A resposta é dada sea-kg 18 set. 2014-09-18 08:02 '14 às 8:02 2014-09-18 08:02

Para objetos não aninhados:

 Object.entries(o).map(x=>x.join(":")).join("\r\n") 
1
20 авг. Resposta dada por Alex Szücs em 20 Ago 2018-08-20 18:50 '18 às 18:50 2018-08-20 18:50

Por exemplo, acho que console.log("Item:",o) seria mais fácil. Mas, console.log("Item:" + o.toString) também funcionará.

Usando o método número um usa um menu drop-down no console, então um objeto longo funcionará lindamente.

1
14 сент. resposta dada Fuzzyzilla 14 sept. 2015-09-14 01:11 '15 às 1:11 am 2015-09-14 01:11

Se você estiver usando o framework Dojo javascript, então já existe uma função de compilação para isso: dojo.toJson (), que será usada assim.

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

qual retornará a corda. Se você quiser converter o objeto em json-data, adicione o segundo parâmetro true.

 dojo.toJson(obj, true); 

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

1
22 сент. Resposta dada por Chris O'Connell Set 22 2011-09-22 00:15 '11 às 0:15 2011-09-22 00:15

Se você não usar aplay join () para Object.

 const obj = {one:1, two:2, three:3}; let arr = []; for(let p in obj) arr.push(obj[p]); const str = arr.join(','); 
0
22 марта '18 в 19:23 2018-03-22 19:23 a resposta é dada por Ilya Indigo 22 de março de 1818 às 19:23

Eu precisava fazer uma versão mais personalizada do JSON.stringify como eu precisava adicionar comentários e conhecer o caminho do JSON:

Se você precisar de um método minimalista para converter uma variável em uma string para uma situação com o tipo de uma expressão sequencial, ''+variablename é a melhor opção para jogar golfe.

Se 'variablename' é um objeto, e você usa a operação de concatenação de string vazia, ele produzirá um [object Object] irritante, caso em que você provavelmente desejará Gary S. uma resposta incrivelmente JSON.stringify para JSON.stringify para uma questão publicada, que Você pode ler sobre a rede de desenvolvedores Mozilla no link da resposta acima .

0
13 сент. Resposta dada por stackuser83 em set 13 2018-09-13 02:07 '18 às 2:07 2018-09-13 02:07

Se você pode usar o lodash, você pode fazer assim:

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

Com o map() da lodash map() você pode percorrer os objetos. Isso mapeia cada entrada de chave / valor para uma representação de string:

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

E join() coloca os registros da matriz juntos.

Se você puder usar a sequência de modelos ES6, isso também funciona:

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

Observe que isso não ocorre recursivamente por meio do objeto:

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

Como o util.inspect() fará:

 > util.inspect(o) '{ a: 1, b: { c: 2 } }' 
0
12 окт. resposta dada kwarnke 12 de out 2017-10-12 18:32 '17 às 18:32 2017-10-12 18:32
 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)+"}"; } 
0
29 февр. A resposta é dada por Mauro em 29 de fevereiro 2016-02-29 05:39 '16 às 5:39 2016-02-29 05:39

Espero que este exemplo ajude todos aqueles que trabalham em uma variedade de objetos

 var data_array = [{ "id": "0", "store": "ABC" },{ "id":"1", "store":"XYZ" }]; console.log(String(data_array[1]["id"]+data_array[1]["store"])); 
0
10 июня '16 в 13:11 2016-06-10 13:11 A resposta é dada por Khushal Chheda 10 de junho de 16 em 1:11 2016-06-10 13:11
 setobjToString:function(obj){ var me =this; obj=obj[0]; var tabjson=[]; for (var p in obj) { if (obj.hasOwnProperty(p)) { if (obj[p] instanceof Array){ tabjson.push('"'+p +'"'+ ':' + me.setobjToString(obj[p])); }else{ tabjson.push('"'+p +'"'+':"'+obj[p]+'"'); } } } tabjson.push() return '{'+tabjson.join(',')+'}'; } 
-1
23 апр. A resposta é dada por Jimmy Anthony Bazan Solis 23 abr. 2015-04-23 17:45 '15 às 5:45 pm 2015-04-23 17:45

Outras perguntas sobre tags ou Ask a question