Stampa oggetto analizzato JSON?


200

Ho un oggetto javascript che è stato analizzato da JSON usando JSON.parseora voglio stampare l'oggetto in modo da poterlo eseguire il debug (qualcosa non funziona con la funzione). Quando faccio quanto segue ...

for (property in obj) {
    output += property + ': ' + obj[property]+'; ';
}
console.log(output);

Ottengo elencati più [oggetto oggetto]. Mi chiedo come lo stamperei per visualizzare i contenuti?


5
come sidenote, poiché (proprietà in obj) elencherà tutte le proprietà, anche quelle ereditate. In questo modo otterrai un gran numero di estranei per Object.prototype e qualsiasi "classe madre". Ciò è poco comodo con gli oggetti json. Devi filtrarli con hasOwnProperty () per ottenere solo le proprietà di questo oggetto.
BiAiB

Risposte:


124

La maggior parte delle console di debugger supporta la visualizzazione diretta degli oggetti. Basta usare

console.log(obj);

A seconda del debugger, ciò molto probabilmente visualizzerà l'oggetto nella console come un albero compresso. Puoi aprire l'albero e ispezionare l'oggetto.


122
Vale la pena ricordare che in Chrome (e forse altri browser) quando combinato con una stringa come questa: console.log("object: " + obj)non visualizza l'oggetto, ma invece genererà "oggetto: [Object obj]".
Shahar,

24
@Shahar console.log("object: %O", obj)(Chrome) o console.log("object: %o", obj)(Firefox | Safari) ti darà accesso ai dettagli dell'oggetto, vedi la mia risposta di seguito.
Dave Anderson,

1
@DaveAnderson buon tiro per la formattazione degli oggetti nella console.
lekant,

@Shahar grazie, le tue erano le informazioni di cui avevo bisogno. Dovrebbe essere aggiunto alla risposta.
Leo Flaherty,

3
Oltre al metodo di @DaveAnderson, può anche funzionare l'uso di una virgola per separare le stringhe dagli oggetti:console.log("My object: ", obj)
Shahar

571

Sai cosa significa JSON? Notazione oggetto JavaScript . Rende un formato abbastanza buono per gli oggetti.

JSON.stringify(obj) ti restituirà una rappresentazione in forma di stringa dell'oggetto.


12
Sono sorpreso che questa risposta sia in fondo ...... Questa dovrebbe essere la risposta accettata :-)
Mingyu,

1
Cosa succede se non si desidera una rappresentazione in formato stringa, ma piuttosto l'oggetto come apparirebbe in un editor di codice?
SuperUberDuper

5
@SuperUberDuper: ... Allora non proveresti a creare una rappresentazione di stringhe, ora. :)
cHao

Credo che SuperUberDuper chiedesse se l'oggetto potesse essere registrato o visualizzato senza convertirlo in una stringa. Se la visualizzazione nel browser del DOM necessita di un elemento, è possibile stringere json così e impostare un contenuto di elementi innerHTML su quella stringa per visualizzarlo sulla pagina.
jasonleonhard,

Ad esempio: importare Json da './data.json'; var el = document.createElement ('div'); el.innerHTML = JSON.stringify (Json);
jasonleonhard,

54

prova console.dir()invece diconsole.log()

console.dir(obj);

MDN afferma che console.dir()è supportato da:

  • FF8 +
  • IE9 +
  • musica lirica
  • Cromo
  • Safari

1
Disponibile solo in IE9 +
jasonscript il

3
console.dir()è disponibile anche in FF8 +, Opera, Chrome e Safari: developer.mozilla.org/en-US/docs/Web/API/console.dir
olibre

Grande! Questa è la soluzione migliore per me. Grazie.
Hoang Le

1
che dire del nodo js?
Xsmael

buono, ma non supporta la concatenazione di stringhe come log ("string" + variabile)
Nassim

47

Se vuoi un JSON carino e multilinea con rientro, puoi usarlo JSON.stringifycon il suo terzo argomento:

JSON.stringify(value[, replacer[, space]])

Per esempio:

var obj = {a:1,b:2,c:{d:3, e:4}};

JSON.stringify(obj, null, "    ");

o

JSON.stringify(obj, null, 4);

ti darà il seguente risultato:

"{
    "a": 1,
    "b": 2,
    "c": {
        "d": 3,
        "e": 4
    }
}"

In un browser console.log(obj)fa un lavoro ancora migliore, ma in una console di shell (node.js) non lo fa.


40

per stampare l'oggetto analizzato JSON basta digitare

console.log( JSON.stringify(data, null, " ") );

e si otterrà un output molto chiaro


25

Usa formati di stringa;

console.log("%s %O", "My Object", obj);

Chrome ha identificatori di formato con i seguenti;

  • %s Formatta il valore come stringa.
  • %do %iFormatta il valore come intero.
  • %f Formatta il valore come valore in virgola mobile.
  • %o Formatta il valore come elemento DOM espandibile (come nel pannello Elementi).
  • %O Formatta il valore come oggetto JavaScript espandibile.
  • %c Formatta la stringa di output in base agli stili CSS forniti.

Firefox ha anche sottostazioni di stringhe che hanno opzioni simili.

  • %oEmette un collegamento ipertestuale a un oggetto JavaScript. Facendo clic sul collegamento si apre un ispettore.
  • %do %iEmette un numero intero. La formattazione non è ancora supportata.
  • %s Emette una stringa.
  • %fEmette un valore in virgola mobile. La formattazione non è ancora supportata.

Safari ha formattatori in stile printf

  • %do %iintero
  • %[0.N]f Valore a virgola mobile con N cifre di precisione
  • %o Oggetto
  • %s Corda

1
bella risposta di riferimento
David

1
% O è davvero utile
everton

4

Bello e semplice:

console.log("object: %O", obj)

1
potresti per favore descrivere a cosa serve% O? dovrebbe essere O specificamente? - la tua soluzione funziona come un fascino
Anthonius il

O sta per oggetto, quindi finché l'oggetto può essere stampato come una stringa, dovrebbe essere stampato senza problemi. Questo mi ha aiutato a risolvere i problemi in molti casi in cui non ero sicuro di dove fosse l'errore
mbenhalima,

Ho dimenticato di informare qui, in realtà non abbiamo bisogno di usare% O. Possiamo usare direttamente console.log ("object:", obj) grazie @mbenhalima
Anthonius

3

Basta usare

console.info("CONSOLE LOG : ")
console.log(response);
console.info("CONSOLE DIR : ")
console.dir(response);

e lo otterrai nella console di Chrome:

CONSOLE LOG : 
facebookSDK_JS.html:56 Object {name: "Diego Matos", id: "10155988777540434"}
facebookSDK_JS.html:57 CONSOLE DIR : 
facebookSDK_JS.html:58 Objectid: "10155988777540434"name: "Diego Matos"__proto__: Object

2

Semplice funzione per avvisare i contenuti di un oggetto o di un array.
Chiamare questa funzione con un array o una stringa o un oggetto che avvisa il contenuto.

Funzione

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

uso

var data = [1, 2, 3, 4];
print_r(data);

2

Il seguente codice visualizzerà i dati json completi nella casella di avviso

var data= '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';

json = JSON.parse(data);
window.alert(JSON.stringify(json));

2

Se si desidera eseguire il debug, perché non utilizzare il debug della console

window.console.debug(jsonObject);

0

Se lavori in js su un server, solo un po 'più di ginnastica fa molta strada ... Ecco il mio ppos (pretty-print-on-server):

ppos = (object, space = 2) => JSON.stringify(object, null, space).split('\n').forEach(s => console.log(s));

che fa un lavoro straordinario nella creazione di qualcosa che posso effettivamente leggere quando scrivo il codice del server.


0

Non so come non sia mai stato realizzato ufficialmente, ma ho aggiunto il mio jsonmetodo per consoleobiettare per stampare più facilmente i registri con stringhe:

Osservare oggetti (non primitivi) in JavaScript è un po 'come la meccanica quantistica ... ciò che "misura" potrebbe non essere lo stato reale, che è già cambiato.

console.json = console.json || function(argument){
    for(var arg=0; arg < arguments.length; ++arg)
        console.log(  JSON.stringify(arguments[arg], null, 4)  )
}

// use example
console.json(   [1,'a', null, {a:1}], {a:[1,2]}    )

Molte volte è necessario visualizzare una versione restrittiva di un oggetto perché stampandolo così com'è (oggetto grezzo) verrà stampata una versione "live" dell'oggetto che viene mutato man mano che il programma avanza e non rispecchia lo stato dell'oggetto nel punto temporale registrato, ad esempio:

var foo = {a:1, b:[1,2,3]}

// lets peek under the hood
console.log(foo) 

// program keeps doing things which affect the observed object
foo.a = 2
foo.b = null
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.