¿Alguien sabe de una manera simple de imprimir bonita salida JSON en Go?
El paquete http://golang.org/pkg/encoding/json/ no parece incluir funcionalidades para esto (EDITAR: sí, ver respuesta aceptada) y un google rápido no muestra nada obvio.
Los usos que estoy buscando son una impresión bonita del resultado json.Marshal
y solo formatean una cadena llena de JSON desde cualquier lugar, por lo que es más fácil de leer con fines de depuración.
json
go
pretty-print
Brad Peabody
fuente
fuente
{name: "value"}
no estará bien, a pesar de que la mayoría de los intérpretes de Javascript lo usan . Solo{"name": "value"}
funcionará con las funciones de la biblioteca Go JSON.Respuestas:
Por letra bonita, supongo que te refieres a sangrado, así
más bien que
La forma más fácil de hacer esto es con
MarshalIndent
, que le permitirá especificar cómo le gustaría sangrar a través delindent
argumento. Por lo tanto,json.MarshalIndent(data, "", " ")
se imprimirá con cuatro espacios para la sangría.fuente
json.MarshalIndent(data, "", "\t")
si quieres pestañasjson.MarshalIndent(data, "", "🐱")
si quieres gatos lo sientojson.MarshalIndent(data, "", "\t🐱")
si quieres ... gatos atigrados ... lo sientoLa respuesta aceptada es excelente si tiene un objeto que desea convertir en JSON. La pregunta también menciona la impresión bonita de cualquier cadena JSON, y eso es lo que estaba tratando de hacer. Solo quería registrar bastante JSON de una solicitud POST (específicamente un informe de violación de CSP ).
Para usar
MarshalIndent
, tendríasUnmarshal
que convertirlo en un objeto. Si necesitas eso, hazlo, pero yo no. Si solo necesita imprimir una matriz de bytes,Indent
es su amigo.Esto es lo que terminé con:
fuente
Para un mejor uso de la memoria, supongo que esto es mejor:
fuente
SetIndent
agregó recientemente? Es esencialmente desconocido para la mayoría.SetIndent
(originalmente nombradoIndent
) se agregó en marzo de 2016 y se lanzó en Go 1.7, que fue aproximadamente 3 años después de que se formulara originalmente esta pregunta: github.com/golang/go/commit/… github.com/golang/go/commit/ …Estaba frustrado por la falta de una forma rápida y de alta calidad para ordenar JSON a una cadena coloreada en Go, así que escribí mi propio Marshaller llamado ColorJSON .
Con él, puede producir fácilmente resultados como este usando muy poco código:
Estoy escribiendo la documentación para ello ahora, pero estaba emocionado de compartir mi solución.
fuente
Editar Mirando hacia atrás, esto no es idiomático Go. Las funciones de ayuda pequeñas como esta agregan un paso adicional de complejidad. En general, la filosofía Go prefiere incluir las 3 líneas simples en lugar de 1 línea difícil.
Como @robyoder mencionó,
json.Indent
es el camino a seguir. Pensé que agregaría esta pequeñaprettyprint
función:https://go-sandbox.com/#/R4LWpkkHIN o http://play.golang.org/p/R4LWpkkHIN
fuente
Esto es lo que uso. Si no puede imprimir bastante el JSON, solo devuelve la cadena original. Útil para imprimir respuestas HTTP que deberían contener JSON.
fuente
Aquí está mi solución :
fuente
Una simple impresora lista para usar en Go. Se puede compilar a un binario a través de:
Se lee desde la entrada estándar, escribe en la salida estándar y permite configurar la sangría:
Permite ejecutar comandos bash como:
fuente
fuente
Soy algo nuevo para ir, pero esto es lo que he reunido hasta ahora:
Esta es la ejecución de la función, y solo estándar
Código:
fuente
fuente