Estou tentando encontrar um caminho para pretty print
uma estrutura de dados JavaScript em um formulário legível por humanos para depuração.
Eu tenho uma estrutura de dados bastante grande e complicada sendo armazenada em JS e preciso escrever um código para manipulá-lo. Para descobrir o que estou fazendo e onde estou errado, o que realmente preciso é poder ver a estrutura de dados na íntegra e atualizá-la sempre que fizer alterações na interface do usuário.
Todas essas coisas que eu consigo resolver, além de encontrar uma boa maneira de despejar uma estrutura de dados JavaScript em uma sequência legível por humanos. JSON faria, mas realmente precisa ser bem formatado e recuado. Normalmente, eu usaria o excelente material de dumping DOM do Firebug para isso, mas realmente preciso ver toda a estrutura de uma só vez, o que não parece ser possível no Firebug.
Todas as sugestões são bem-vindas.
Desde já, obrigado.
fonte
Respostas:
Eu escrevi uma função para despejar um objeto JS de forma legível, embora a saída não seja recuada, mas não deve ser muito difícil acrescentar isso: Eu criei essa função de uma que criei para Lua (que é muito mais complexa ) que tratou desse problema de recuo.
Aqui está a versão "simples":
Vou tentar melhorar um pouco.
Nota 1: Para usá-lo, faça
od = DumpObject(something)
e use od.dump. Envolvido porque eu também queria o valor len (número de itens) para outra finalidade. É trivial fazer com que a função retorne apenas a string.Nota 2: não trata de loops em referências.
EDITAR
Eu fiz a versão recuada.
Escolha seu recuo na linha com a chamada recursiva e você poderá escolher o estilo alternando a linha comentada após esta.
... Vejo que você criou sua própria versão, o que é bom. Os visitantes terão uma escolha.
fonte
Use o JSON.stringify de Crockford assim:
A variável
text
ficaria assim:A propósito, isso não requer nada além do arquivo JS - ele funcionará com qualquer biblioteca etc.
fonte
JSON.stringify((function(){var x = []; x.push(x); return x})())
e em muitos outros tipos de objetosJSON.stringify(/foo/)
.Você pode usar o seguinte
fonte
Em
Firebug
, se você apenasconsole.debug ("%o", my_object)
clicar nele no console e entrar em um explorador de objetos interativo. Ele mostra o objeto inteiro e permite expandir objetos aninhados.fonte
Para Node.js, use:
Documentação da API
fonte
Para quem procura uma maneira incrível de ver seu objeto, verifique prettyPrint.js
Cria uma tabela com opções de exibição configuráveis para serem impressas em algum lugar no seu documento. Melhor olhar do que no
console
.fonte
Estou programando
Rhino
e não estava satisfeito com nenhuma das respostas postadas aqui. Então, eu escrevi minha própria impressora bonita:A saída é assim:
Também o publiquei como um Gist aqui para quaisquer alterações futuras que possam ser necessárias.
fonte
jsDump
torna-se
QUnit (estrutura de teste de unidade usada pelo jQuery) usando a versão ligeiramente corrigida do jsDump.
JSON.stringify () não é a melhor opção em alguns casos.
fonte
Assumindo a liderança de PhiLho (muito obrigado :)), acabei escrevendo a minha, pois não conseguia que ele fizesse o que queria. É bem difícil e pronto, mas faz o trabalho que eu preciso. Obrigado a todos pelas excelentes sugestões.
Não é um código brilhante, eu sei, mas pelo que vale a pena, aqui está. Alguém pode achar útil:
fonte
Este é realmente apenas um comentário sobre "Use JSON.stringify de Crockford", mas não pude adicionar um comentário a essa resposta.
Conforme observado nos comentários, o JSON.stringify não funciona bem com a biblioteca Prototype (www.prototypejs.org). No entanto, é bastante fácil fazê-los funcionar bem juntos, removendo temporariamente o método Array.prototype.toJSON que o protótipo adiciona, execute o stringify () de Crockford e coloque-o novamente da seguinte forma:
fonte
Eu pensei que a resposta do J. Buntings ao usar o JSON.stringify também era boa. Além disso, você pode usar JSON.stringify via YUIs, objeto JSON, se estiver usando YUI. No meu caso, eu precisava despejar para HTML, para que fosse mais fácil ajustar / cortar / colar a resposta do PhiLho.
fonte
Muitas pessoas escrevem código neste tópico, com muitos comentários sobre várias dicas. Gostei desta solução porque parecia completa e era um único arquivo sem dependências.
navegador
nodejs
Ele funcionou "pronto para uso" e possui versões de nó e navegador (presumivelmente apenas invólucros diferentes, mas não procurei confirmar).
A biblioteca também suporta bastante impressão XML, SQL e CSS, mas eu não tentei esses recursos.
fonte
Simples para imprimir os elementos como seqüências de caracteres:
fonte
Minha biblioteca NeatJSON possui as versões Ruby e JavaScript . Está disponível gratuitamente sob uma licença (permissiva) do MIT. Você pode ver uma demonstração / conversor on-line em:
http://phrogz.net/JS/neatjson/neatjson.html
Alguns recursos (todos opcionais):
fonte
O flexjson inclui uma função prettyPrint () que pode fornecer o que você deseja.
fonte