200 votes

Comment enregistrer le contenu d'un objet JSON dans Node.js ?

Est-il possible d'imprimer le contenu d'un objet, par exemple les méthodes et les attributs, dans Node.js ?

Pour le moment, j'essaie d'imprimer l'objet de session et j'obtiens ce qui suit :

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

Peut-être d'une manière similaire à print_r(array) en PHP, ou en utilisant .toString en Java.

9 votes

console.log("Session:" + util.inspect(session))

1 votes

Pour une sortie plus intuitive et visuelle des objets, jetez un œil à nodedump : github.com/ragamufin/nodedump

305voto

Alexander Sulfrian Points 1270

Essaie celle-là :

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

Si l'objet peut être converti en JSON, cela fonctionnera.

9 votes

J'essaie de faire cela pour l'objet de la demande mais l'erreur TypeError apparaît : Converting circular structure to JSON Is there any way to limit the depth

0 votes

Il y a moyen d'imprimer ça ?

6 votes

@chovy : quelque chose comme ceci pourrait fonctionner : console.log(JSON.stringify(json, null, 4)) ;

154voto

ccgillett Points 536
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 sur MDN

3 votes

De loin la meilleure réponse +1 !

33voto

lapo Points 1471

Pour avoir une sortie plus similaire à la sortie brute console.log(obj) J'utilise habituellement console.log('Status: ' + util.inspect(obj)) (JSON est légèrement différent).

4 votes

Cela donne "util n'est pas défini". Vous devez d'abord `var util = require("util"). De plus, les sous-objets se présentent toujours comme [Object] et non comme la chaîne JSON qui les représente.

14 votes

Pour supprimer la limite de profondeur, utilisez : require('util').inspect(obj, {depth:null})

30voto

Smarty Twiti Points 687

Cela fonctionne avec n'importe quel objet :

    var util = require("util");
    console.log(util.inspect(myObject, {showHidden: false, depth: null}));

2 votes

Cela fonctionne très bien pour les objets d'erreur. Aucune de leurs propriétés n'apparaît dans les autres solutions.

1 votes

Ça ne tient pas debout pour moi. Je pense que les références circulaires dans un objet le font planter.

0 votes

@Richard il s'est probablement bloqué pour vous à cause de l'option de profondeur qui est définie sur null . Inspect a un traitement intégré pour les références circulaires.

7voto

rainabba Points 429

Console.dir() est le moyen le plus direct.

0 votes

Console.dir(someJsonObject) ; laisse toujours les objets imbriqués non imprimés, pour moi.

1 votes

Je pense qu'il ne pourra pas percer les objets à travers leur prototype et qu'il ne traitera pas certaines récursions. Vous allez devoir faire quelque chose comme console.log(JSON.stringify()) ou quelque chose de plus spécifique à votre objet si .dir() n'est pas suffisant. Si vous avez plus d'informations sur l'objet, peut-être que des conseils plus spécifiques pourront être donnés.

0 votes

Il peut prendre les mêmes options que util.inspect. Ajouter {profondeur:null}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X