¿Cómo se registra el contenido de un objeto JSON en Node.js?

171

¿Es posible imprimir el contenido de un objeto, por ejemplo, métodos y atributos en Node.js?

En este momento estoy intentando imprimir el objeto de sesión y obtener lo siguiente:

console.log("Session:" + session);
> Session:[object Object]

Tal vez de manera similar a print_r (array) en PHP, o usando .toString en Java.

Jack
fuente
9
console.log("Session:" + util.inspect(session))
Raynos
1
Para una salida más intuitiva y visual de los objetos, eche un vistazo a nodedump: github.com/ragamufin/nodedump
ragamufin

Respuestas:

271

Prueba este:

console.log("Session: %j", session);

Si el objeto se puede convertir a JSON, eso funcionará.

Alexander Sulfrian
fuente
9
Estoy tratando de hacer esto para el objeto de solicitud, pero muestra el error TypeError: Convertir la estructura circular a JSON ¿Hay alguna forma de limitar la profundidad
Neil
de todos modos para imprimir esto bonito?
chovy
66
@chovy: algo como esto podría funcionar: console.log (JSON.stringify (json, null, 4));
Eric Brandel
1
esto funcionó para mí: console.log("Session: %O", session); developer.mozilla.org/en-US/docs/Web/API/…
JP Lew
Trabajó para mi respuesta API json! Gracias
rodrigorf
130
function prettyJSON(obj) {
    console.log(JSON.stringify(obj, null, 2));
}

// obj -> value to convert to a JSON string
// null -> (do nothing)
// 2 -> 2 spaces per indent level

JSON.stringify en MDN

ccgillett
fuente
1
con mucho, la mejor respuesta +1!
decoder7283
33

Para tener una salida más similar a la sin console.log(obj)formato, generalmente uso console.log('Status: ' + util.inspect(obj))(JSON es ligeramente diferente).

lapo
fuente
44
Esto da "util no está definido". Debe `var util = require (" util ") primero. Además, los subobjetos aún resultan ser [Objeto] y no la cadena JSON que los representa.
juanpaco
13
Para eliminar el límite de profundidad, use:require('util').inspect(obj, {depth:null})
lapo
25

Esto funcionará con cualquier objeto:

    var util = require("util");
    console.log(util.inspect(myObject, {showHidden: false, depth: null}));
Marwen Trabelsi
fuente
2
Esto funciona muy bien para objetos de error. Ninguna de sus propiedades se muestra en las otras soluciones.
Chris
1
Esto simplemente me cuelga. Creo que las referencias circulares en un objeto lo estrellan
Richard
@ Richard probablemente se cuelgue (ed) debido a la opción de profundidad establecida null. Inspeccionar tiene un tratamiento incorporado para referencias circulares.
2grit
6

console.dir () es la forma más directa.

rainabba
fuente
console.dir (someJsonObject); todavía deja objetos anidados sin imprimir, para mí.
nyarasha
1
Creo que no perforará objetos a través de su prototipo y no tratará con cierta recursividad. Tendrá que hacer algo como console.log (JSON.stringify ()) o algo más específico para su objeto si .dir () no es suficiente. Si tiene más información sobre el objeto, quizás se le puedan dar consejos más específicos.
rainabba
Puede tomar las mismas opciones que util.inspect. Agregue {profundidad: nulo}
nikc.org
0
console.log(obj);

Ejecute: nodo app.js> output.txt

Ростислав Борніцький
fuente
0

Esto será para la mayoría de los objetos para la salida en la consola de nodejs

var util = require('util')
function print (data){
  console.log(util.inspect(data,true,12,true))
  
}

print({name : "Your name" ,age : "Your age"})

Manoj Kumar
fuente