Estoy tratando de encontrar un camino hacia pretty print
una estructura de datos JavaScript en una forma legible para la depuración.
Tengo una estructura de datos bastante grande y complicada que se almacena en JS y necesito escribir un código para manipularlo. Para resolver lo que estoy haciendo y dónde me estoy equivocando, lo que realmente necesito es poder ver la estructura de datos en su totalidad y actualizarla cada vez que realice cambios a través de la interfaz de usuario.
Todo esto lo puedo manejar yo mismo, además de encontrar una buena manera de volcar una estructura de datos JavaScript en una cadena legible por humanos. JSON lo haría, pero realmente necesita estar bien formateado y sangrado. Por lo general, usaría el excelente material de descarga DOM de Firebug para esto, pero realmente necesito poder ver toda la estructura a la vez, lo que no parece posible en Firebug.
Cualquier sugerencia es bienvenida.
Gracias por adelantado.
Respuestas:
Escribí una función para volcar un objeto JS en una forma legible, aunque el resultado no está sangrado, pero no debería ser demasiado difícil agregar eso: hice esta función desde una que hice para Lua (que es mucho más complejo ) que manejó este problema de sangría.
Aquí está la versión "simple":
Trataré de mejorarlo un poco.
Nota 1: Para usarlo, haz
od = DumpObject(something)
y usa od.dump. Enrevesado porque también quería el valor de len (número de artículos) para otro propósito. Es trivial hacer que la función devuelva solo la cadena.Nota 2: no maneja bucles en las referencias.
EDITAR
Hice la versión con sangría.
Elija su sangría en la línea con la llamada recursiva, y refuerza el estilo cambiando la línea comentada después de esta.
... Veo que preparaste tu propia versión, lo cual es bueno. Los visitantes tendrán una opción.
fuente
Use Crockford's JSON.stringify de esta manera:
La variable
text
se vería así:Por cierto, esto no requiere nada más que ese archivo JS: funcionará con cualquier biblioteca, etc.
fuente
JSON.stringify((function(){var x = []; x.push(x); return x})())
y en muchos otros tipos de objetosJSON.stringify(/foo/)
.Puedes usar lo siguiente
fuente
En
Firebug
, si soloconsole.debug ("%o", my_object)
puede hacer clic en él en la consola e ingresar a un explorador de objetos interactivo. Muestra todo el objeto y le permite expandir objetos anidados.fuente
Para Node.js, use:
Documentación API
fuente
Para aquellos que buscan una forma increíble de ver su objeto, revisen prettyPrint.js
Crea una tabla con opciones de vista configurables para imprimir en algún lugar de su documento. Mejor mirar que en el
console
.fuente
Estoy programando
Rhino
y no estaba satisfecho con ninguna de las respuestas que se publicaron aquí. Así que escribí mi propia impresora bonita:El resultado se ve así:
También lo publiqué aquí como un Gist para cualquier cambio futuro que se requiera.
fuente
jsDump
se convierte
QUnit (marco de prueba de unidad utilizado por jQuery) usando una versión ligeramente parcheada de jsDump.
JSON.stringify () no es la mejor opción en algunos casos.
fuente
Tomando el liderazgo de PhiLho (muchas gracias :)), terminé escribiendo el mío ya que no podía lograr que él hiciera lo que quería. Es bastante duro y listo, pero hace el trabajo que necesito. Gracias a todos por las excelentes sugerencias.
No es un código brillante, lo sé, pero por lo que vale, aquí está. Alguien puede encontrarlo útil:
fuente
Esto es realmente solo un comentario sobre "Use JSON.stringify" de Jason Bunting, pero no pude agregar un comentario a esa respuesta.
Como se señaló en los comentarios, JSON.stringify no funciona bien con la biblioteca Prototype (www.prototypejs.org). Sin embargo, es bastante fácil hacer que jueguen bien juntos eliminando temporalmente el método Array.prototype.toJSON que agrega el prototipo, ejecute el stringify () de Crockford y luego vuelva a colocarlo así:
fuente
Pensé que la respuesta de J. Buntings sobre el uso de JSON.stringify también fue buena. Además, puede usar JSON.stringify a través del objeto JSON de YUI si está usando YUI. En mi caso, necesitaba volcar a HTML, por lo que fue más fácil simplemente ajustar / cortar / pegar la respuesta de PhiLho.
fuente
Mucha gente escribe código en este hilo, con muchos comentarios sobre varios problemas. Me gustó esta solución porque parecía completa y era un solo archivo sin dependencias.
navegador
nodejs
Funcionó "fuera de la caja" y tiene versiones tanto de nodo como de navegador (presumiblemente solo envoltorios diferentes pero no busqué para confirmar).
La biblioteca también admite la impresión bonita de XML, SQL y CSS, pero no he probado esas características.
fuente
Una simple para imprimir los elementos como cadenas:
fuente
Mi biblioteca NeatJSON tiene versiones de Ruby y JavaScript . Está disponible gratuitamente bajo una Licencia MIT (permisiva). Puede ver una demostración / convertidor en línea en:
http://phrogz.net/JS/neatjson/neatjson.html
Algunas características (todas opcionales):
fuente
flexjson incluye una función prettyPrint () que puede darte lo que quieres.
fuente