Alguém conhece uma maneira simples de imprimir bastante a saída JSON no Go?
O pacote http://golang.org/pkg/encoding/json/ parece não incluir funcionalidade para isso (EDIT: faz, veja resposta aceita) e um rápido google não mostra nada óbvio.
Os usos que estou procurando estão imprimindo bastante o resultado json.Marshal
e apenas formatando uma string cheia de JSON de qualquer lugar, para que seja mais fácil ler para fins de depuração.
json
go
pretty-print
Brad Peabody
fonte
fonte
{name: "value"}
não ficará bem, apesar de a maioria dos intérpretes Javascript usá-lo . Apenas{"name": "value"}
funcionará com as funções da biblioteca Go JSON.Respostas:
Por impressão bonita, suponho que você quer dizer recuado, assim
ao invés de
A maneira mais fácil de fazer isso é usando
MarshalIndent
, o que permitirá que você especifique como gostaria que fosse recuado por meio doindent
argumento. Assim,json.MarshalIndent(data, "", " ")
imprimirá bastante usando quatro espaços para indentação.fonte
json.MarshalIndent(data, "", "\t")
se você quiser abas.json.MarshalIndent(data, "", "🐱")
se você quer gatos. desculpejson.MarshalIndent(data, "", "\t🐱")
se você quiser ... gatos tigrados ... desculpe #A resposta aceita é ótima se você tiver um objeto que deseja transformar em JSON. A pergunta também menciona a impressão bonita de qualquer string JSON, e era isso que eu estava tentando fazer. Eu só queria registrar bastante o JSON de uma solicitação POST (especificamente um relatório de violação do CSP ).
Para usar
MarshalIndent
, você precisariaUnmarshal
disso em um objeto. Se você precisar, vá em frente, mas eu não. Se você só precisa imprimir uma matriz de bytes, oIndent
seu amigo é simples .Aqui está o que eu acabei com:
fonte
Para melhor uso da memória, acho que é melhor:
fonte
SetIndent
foi adicionado recentemente? É essencialmente desconhecido para a maioria.SetIndent
(originalmente chamadoIndent
) foi adicionado em março de 2016 e lançado no Go 1.7, cerca de 3 anos após a pergunta inicial: github.com/golang/go/commit/… github.com/golang/go/commit/ …Fiquei frustrado com a falta de uma maneira rápida e de alta qualidade de ordenar JSON para uma sequência colorida no Go, então escrevi meu próprio Marshaller chamado ColorJSON .
Com ele, você pode produzir facilmente uma saída como essa usando muito pouco código:
Estou escrevendo a documentação para isso agora, mas fiquei empolgado em compartilhar minha solução.
fonte
Editar Olhando para trás, isso é Go não-idiomático. Funções auxiliares pequenas como essa adicionam uma etapa extra de complexidade. Em geral, a filosofia Go prefere incluir as 3 linhas simples em vez de 1 linha complicada.
Como o @robyoder mencionou,
json.Indent
é o caminho a percorrer. Pensei em adicionar esta pequenaprettyprint
função:https://go-sandbox.com/#/R4LWpkkHIN ou http://play.golang.org/p/R4LWpkkHIN
fonte
Aqui está o que eu uso. Se ele não conseguir imprimir o JSON, apenas retornará a string original. Útil para imprimir respostas HTTP que devem conter JSON.
fonte
Aqui está a minha solução :
fonte
Uma simples impressora pronta para uso no Go. Pode-se compilá-lo em um binário através de:
Ele lê da entrada padrão, grava na saída padrão e permite definir o recuo:
Permite executar comandos bash como:
fonte
fonte
Eu sou uma espécie de novato, mas é isso que eu reuni até agora:
Esta é a execução da função, e apenas o padrão
Código:
fonte
fonte