Como posso converter um objeto JavaScript em uma string?
Exemplo:
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Resultado:
Objeto {a = 1, b = 2} // saída legível muito boa :)
Item: [objeto Objeto] // não faz ideia do que está dentro :(
javascript
string
object
serialization
tostring
user680174
fonte
fonte
console.log("Item", obj);
. Não há necessidade de nada complicado.Respostas:
Eu recomendaria usar
JSON.stringify
, que converte o conjunto de variáveis no objeto em uma string JSON. A maioria dos navegadores modernos suporta esse método nativamente, mas para aqueles que não suportam, você pode incluir uma versão JS :fonte
foo: function () {...}
.JSON.stringify(obj, null, 2);
para obter uma saída mais bonita.Use javascript String () função
ou stringify ()
fonte
JSON.stringify(yourobject)
empregada doméstica meu dia!Claro, para converter um objeto em uma string, você precisa usar seu próprio método, como:
Na verdade, o acima mostra apenas a abordagem geral; você pode usar algo como http://phpjs.org/functions/var_export:578 ou http://phpjs.org/functions/var_dump:604
ou, se você não estiver usando métodos (funciona como propriedades do seu objeto), poderá usar o novo padrão (mas não implementado em navegadores mais antigos, embora possa encontrar um utilitário para ajudá-lo também), JSON .stringify (). Mas, novamente, isso não funcionará se o objeto usar funções ou outras propriedades que não sejam serializáveis para JSON.
fonte
Para simplificar
console
, você pode usar vírgula em vez de a+
. O+
tentará converter o objeto em uma string, enquanto a vírgula o exibirá separadamente no console.Exemplo:
Resultado:
Referência: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
fonte
console.log(o)
:? Como se você tentar registrar um objeto adicionado a uma string, ele realmente chamarátoString()
o objeto.console.log
em última análise, chama algo chamadoPrinter
que a especificação observa: "Como a implementação imprime args depende da implementação" - o que significa que todo navegador pode fazer isso de maneira diferente (consulte console.spec.whatwg.org/#printer ). O Firefox exibirá objetos como uma string, mas com cores bonitas. O Chrome exibirá o objeto como um grupo interativo que você pode expandir para ver as propriedades. De uma chance!console.log('Item: ', o);
ainda éItem: [object Object]
.console.log
você pode usarconsole.dir(o)
para imprimir o objeto javascript, para imprimi-lo como uma string. Nas ferramentas do desenvolvedor, isso permite abrir o objeto e verificar todas as propriedades, mesmo matrizes. (consulte: developer.mozilla.org/de/docs/Web/API/Console/dir )EDITAR Não use esta resposta, pois ela não funciona no Internet Explorer. Use Gary Chambers solução de .
toSource () é a função que você está procurando que a escreverá como JSON.
fonte
toSource()
não funciona no IE.toSource()
não é um padrão reconhecido, portanto, não é possível garantir o suporte em todos os navegadores.Uma opção :
console.log('Item: ' + JSON.stringify(o));
Outra opção (como soktinpk apontou nos comentários), e melhor para a IMO de depuração do console:
console.log('Item: ', o);
fonte
Nenhuma das soluções aqui funcionou para mim. JSON.stringify parece ser o que muita gente diz, mas corta funções e parece bastante danificado para alguns objetos e matrizes que tentei ao testá-lo.
Eu fiz minha própria solução que funciona pelo menos no Chrome. Postá-lo aqui para que qualquer pessoa que pesquisar isso no Google possa encontrá-lo.
Edição: Eu sei que este código pode ser melhorado, mas nunca chegou a fazê-lo. O usuário andrey sugeriu uma melhoria aqui com o comentário:
Use isso por sua conta e risco, pois eu ainda não o verifiquei. Sinta-se livre para sugerir melhorias adicionais como um comentário.
fonte
,
no final de cada objeto / matriz.Se você está apenas enviando para o console, pode usar
console.log('string:', obj)
. Observe a vírgula .fonte
console.log
geralmente é exibida após o AJAX concluir o fornecimento de dados em paralelo à matriz, o que leva a resultados enganosos. Nesses casos, a clonagem ou a serialização de objetos é o caminho a seguir: desde que registramos objetos duplicados, mesmo quando o AJAX termina seu trabalho, ele preenche dados "antigos".Nos casos em que você sabe que o objeto é apenas um Booleano, Data, String, número etc ... A função javascript String () funciona perfeitamente. Recentemente, eu achei isso útil ao lidar com valores provenientes da função $ .each do jquery.
Por exemplo, o seguinte converteria todos os itens em "valor" em uma cadeia de caracteres:
Mais detalhes aqui:
http://www.w3schools.com/jsref/jsref_string.asp
fonte
var my_string = ''+value+'';
fonte
Eu estava procurando por isso e escrevi uma profunda recursiva com recuo:
Uso:
objToString({ a: 1, b: { c: "test" } })
fonte
if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }
na função, com MAX_DEPTH_LEVEL sendo o seu número máximo escolhido de camadas de objeto para cavar.Se você quiser apenas ver o objeto para depuração, poderá usar
fonte
1
2)
fonte
Os métodos JSON são bastante inferiores ao primitivo .toSource () do mecanismo Gecko.
Consulte a resposta do artigo SO para testes de comparação.
Também o resposta acima se refere a http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html , que, como JSON, (que o outro artigo http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json usa via "ExtJs JSON codificar código fonte" ) não pode manipular referências circulares e está incompleto. O código abaixo mostra suas limitações (falsas) (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 )
que exibe:
e
e
fonte
Na verdade, existe uma opção fácil (para navegadores recentes e Node.js) ausente nas respostas existentes:
Eu preferiria isso porque
JSON.stringify()
tem certas limitações (por exemplo, com estruturas circulares).fonte
Parece que o JSON aceita o segundo parâmetro que poderia ajudar nas funções - substituto , isso resolve o problema de conversão da maneira mais elegante:
fonte
Se você se importa apenas com cadeias, objetos e matrizes:
fonte
stringify-object
é uma boa biblioteca de npm feita pela equipe yeoman: https://www.npmjs.com/package/stringify-objectentão:
Obviamente, é interessante apenas se você tiver um objeto circular que falharia com
JSON.stringify();
fonte
Dê uma olhada no plugin jQuery-JSON
Na sua essência, ele usa JSON.stringify, mas retorna ao seu próprio analisador se o navegador não o implementar.
fonte
Como o Firefox não especifica algum objeto como objeto de tela; se você deseja obter o mesmo resultado, como
JSON.stringify(obj)
:fonte
Para objetos não aninhados:
fonte
Como o Javascript v1.0 funciona em qualquer lugar (até o IE), essa é uma abordagem nativa e permite uma aparência muito cara do seu objeto durante a depuração e na produção https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Objetos_ globais / Objeto / toString
Exemplo útil
Além disso, como um bônus
fonte
Se você pode usar o lodash, pode fazê-lo desta maneira:
Com o lodash,
map()
você também pode interagir com os objetos. Isso mapeia cada entrada de chave / valor para sua representação de sequência:E
join()
coloque as entradas da matriz juntas.Se você pode usar a ES6 Template String, isso também funciona:
Observe que isso não é recursivo através do objeto:
Como o nó
util.inspect()
fará:fonte
Se você estiver usando a estrutura javascript do Dojo, já existe uma função de construção para fazer isso: dojo.toJson () que seria usada dessa maneira.
que retornará uma string. Se você deseja converter o objeto em dados json, adicione um segundo parâmetro de true.
http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson
fonte
exemplo para usar:
your_object1.txt:
your_object2.txt:
fonte
Para o seu exemplo, acho
console.log("Item:",o)
que seria mais fácil. Mas,console.log("Item:" + o.toString)
também funcionaria.O uso do método número um usa um bom menu suspenso no console; portanto, um objeto longo funcionaria bem.
fonte
fonte
Espero que este exemplo ajude a todos aqueles que estão trabalhando na variedade de objetos
fonte
Se você não jogará join () no Object.
fonte
Se você deseja um método minimalista de converter uma variável em uma sequência de caracteres para uma situação de tipo de expressão embutida,
''+variablename
é o melhor que já joguei.Se 'variablename' for um objeto e você usar a operação de concatenação de cadeias vazias, isso causará irritante
[object Object]
; nesse caso, você provavelmente deseja aJSON.stringify
resposta enormemente votada por Gary C. à pergunta publicada, sobre a qual você pode ler na Mozilla's Developer Network. no link dessa resposta na parte superior .fonte