JSON ayrıştırılmış nesne yazdırılsın mı?


200

JSON JSON.parseşimdi hata ayıklamak için nesneyi yazdırmak istiyorum (işlevi ile yanlış bir şey oluyor) kullanarak kullanarak JSON ayrıştırılmış olan bir javascript nesne var . Aşağıdakileri yaptığımda ...

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

Birden çok [object Object] listeliyorum. İçeriği görüntülemek için bunu nasıl yazdıracağımı merak ediyorum?


5
bir sidenote olarak, (obj içindeki mülk) miras alınanlar dahil tüm mülkleri listeler. Böylece Object.prototype ve herhangi bir 'ana sınıf' için çok fazla yabancı bir tane alacaksınız. Bu json nesneleri ile rahatsız edici. Yalnızca bu nesnenin sahip olduğu özellikleri almak için bunları hasOwnProperty () ile filtrelemeniz gerekir.
BiAiB

Yanıtlar:


124

Çoğu hata ayıklayıcı konsolu, nesnelerin doğrudan görüntülenmesini destekler. Sadece kullan

console.log(obj);

Hata ayıklayıcınıza bağlı olarak, bu büyük olasılıkla konsoldaki nesneyi daraltılmış bir ağaç olarak görüntüler. Ağacı açabilir ve nesneyi inceleyebilirsiniz.


122
Chrome'da (ve belki de diğer tarayıcılarda) böyle bir dize ile birleştirildiğinde şunu belirtmek gerekir: console.log("object: " + obj)nesneyi görüntülemez, bunun yerine "object: [Object obj]" çıktısını verir.
Shahar

24
@Shahar console.log("object: %O", obj)(Chrome) veya console.log("object: %o", obj)(Firefox | Safari), nesne ayrıntılarına erişmenizi sağlayacaktır, aşağıdaki cevabıma bakın.
Dave Anderson

1
@DaveAnderson konsoldaki nesne biçimlendirmesi için iyi bir çekim.
lekant

@Shahar teşekkürler, senin ihtiyacım olan bilgiydi. Cevaba eklenmelidir.
Leo Flaherty

3
@DaveAnderson'ın yöntemine ek olarak, dizeleri nesnelerden ayırmak için virgül kullanmak da işe yarayabilir:console.log("My object: ", obj)
Shahar

572

JSON'un ne anlama geldiğini biliyor musunuz? JavaScript Nesne Gösterimi . Nesneler için oldukça iyi bir format oluşturur.

JSON.stringify(obj) size nesnenin dize olarak temsilini verir.


12
Bu cevap en altta ...... şaşırdım Bu kabul edilen cevap olmalıdır :-)
Mingyu

1
Bir dize temsili istemiyorsanız, bunun yerine nesneyi bir kod düzenleyicisinde görünmesini istediğinizde ne olur?
SuperUberDuper

5
@SuperUberDuper: ... O zaman dize temsili oluşturmaya çalışmazsınız, şimdi. :)
cHao

SuperUberDuper nesnenin bir dizeye dönüştürülmeden kaydedilebilir veya görüntülenebilir olmadığını soran inanıyorum. Tarayıcıda DOM'nin bir öğeye ihtiyacı varsa, json'u dizgi yapabilir ve sayfada görüntülemek için bu dizeye innerHTML öğelerinin içeriğini ayarlayabilirsiniz.
jasonleonhard

Örneğin: Json'u './data.json' adresinden içe aktarın; var el = document.createElement ('div'); el.innerHTML = JSON.stringify (Json);
jasonleonhard

54

console.dir()yerine deneconsole.log()

console.dir(obj);

MDN diyor ki console.dir():

  • FF8 +
  • IE9 +
  • Opera
  • Krom
  • Safari

1
Sadece IE9 + 'da mevcuttur
jasonscript

3
console.dir()ayrıca FF8 +, Opera, Chrome ve Safari'de de mevcuttur: developer.mozilla.org/en-US/docs/Web/API/console.dir
olibre

Harika! Bu benim için en iyi çözüm. Teşekkürler.
Hoang Le

1
js düğümü ne olacak?
Xsmael

iyi, ancak log ("string" + değişken) gibi string birleşimini desteklemiyor
Nassim

48

Girintili güzel, çok satırlı bir JSON istiyorsanız JSON.stringify, 3. bağımsız değişkeniyle kullanabilirsiniz:

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

Örneğin:

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

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

veya

JSON.stringify(obj, null, 4);

size aşağıdaki sonucu verecektir:

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

Bir tarayıcıda console.log(obj)daha iyi iş yapar, ancak bir kabuk konsolunda (node.js) işe yaramaz.


40

Ayrıştırılmış nesne yazdırmak için sadece yazın

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

ve çıktı çok net alacak


25

Dize biçimlerini kullanın;

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

Chrome'da aşağıdakilere sahip Format Specifier'lar bulunur ;

  • %s Değeri dize olarak biçimlendirir.
  • %dveya %iDeğeri bir tamsayı olarak biçimlendirir.
  • %f Değeri kayan nokta değeri olarak biçimlendirir.
  • %o Değeri genişletilebilir bir DOM öğesi olarak biçimlendirir (Elements panelinde olduğu gibi).
  • %O Değeri, genişletilebilir bir JavaScript nesnesi olarak biçimlendirir.
  • %c Çıkış dizesini sağladığınız CSS stillerine göre biçimlendirir.

Firefox'un da benzer seçeneklere sahip String Substitions'ı var.

  • %oBir JavaScript nesnesine köprü gönderir. Bağlantı tıklandığında bir denetçi açılır.
  • %dveya %iBir tamsayı çıkarır. Biçimlendirme henüz desteklenmiyor.
  • %s Bir dize çıktılar.
  • %fKayan nokta değeri verir. Biçimlendirme henüz desteklenmiyor.

Safari'de printf tarzı formatlayıcılar var

  • %dveya %iTamsayı
  • %[0.N]f N basamaklı hassaslık ile kayan nokta değeri
  • %o Nesne
  • %s sicim

1
güzel referans cevap
David

1
% O gerçekten yardımcı oluyor
everton

4

Güzel ve basit:

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

1
% O ne anlama geliyor? özellikle O olmalı mı? - çözümünüz bir cazibe gibi çalışıyor
Anthonius

O, nesnenin kısaltması olduğu sürece nesne anlamına gelir, herhangi bir sorun olmadan yazdırılmalıdır. Bu, hatanın nerede olduğundan emin olmadığım birçok durumda sorun gidermeme yardımcı oldu
mbenhalima

Buraya bilgi vermeyi unuttum, aslında% O kullanmamız gerekmiyor. Doğrudan console.log ("object:", obj) kullanabiliriz teşekkür ederim @mbenhalima
Anthonius

3

Sadece kullan

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

ve bunu krom konsolunda alacaksınız:

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

Bir nesnenin veya dizinin içeriğini uyarmak için basit işlev.
Bu işlevi bir dizi veya dize veya içeriği uyaran bir nesne ile çağırın.

fonksiyon

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);
    }
}

kullanım

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

2

Aşağıdaki kod, uyarı kutusunda tam json verilerini görüntüleyecektir

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

Hata ayıklamak istiyorsanız neden konsol hata ayıklamasını kullanmıyorsunuz?

window.console.debug(jsonObject);

0

Bir sunucuda js üzerinde çalışıyorsanız, sadece biraz daha jimnastik uzun bir yol kat ediyor ... İşte benim ppos (sunucuda güzel baskı):

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

hangi sunucu kodu yazarken gerçekten okuyabileceğim bir şey yaratmak bir patlama iş yapar.


0

Ben resmen asla yapıldı bilmiyorum, ama benim kendi ekledik jsonyöntemi ile consoledaha kolay baskı dizgelenmiş günlükleri nesne:

Javascript Nesneleri (ilkel olmayan) gözlemlemek kuantum mekaniği gibi biraz ... ne "ölçmek" zaten değişmiş gerçek durum olmayabilir.

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]}    )

Çoğu zaman bir nesnenin dize edilmiş bir sürümünü görüntülemek gerekir, çünkü onu olduğu gibi yazdırmak (ham Nesne), program ilerledikçe mutasyona uğrayan nesnenin "canlı" bir sürümünü basar ve nesnenin durumunu yansıtmaz kaydedilen zaman noktasında, örneğin:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.