2011-02-08 63 views
145

Tôi đã có một đối tượng javascript đã được phân tích cú pháp JSON bằng cách sử dụng JSON.parse Tôi bây giờ muốn in đối tượng để tôi có thể gỡ lỗi nó (một cái gì đó đang sai với chức năng). Khi tôi làm như sau ...In đối tượng được phân tích cú pháp JSON?

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

Tôi nhận được nhiều [đối tượng của đối tượng] được liệt kê. Tôi tự hỏi làm thế nào tôi sẽ in này để xem nội dung?

+5

như một sidenote, cho (thuộc tính trong obj) sẽ liệt kê tất cả các thuộc tính, ngay cả các thuộc tính được thừa kế. Vì vậy, bạn sẽ nhận được rất nhiều không liên quan một cominng cho Object.prototype và bất kỳ "lớp mẹ". Điều này là không thuận tiện với các đối tượng json. Bạn phải lọc chúng bằng hasOwnProperty() để chỉ nhận các thuộc tính mà đối tượng này sở hữu. – BiAiB

Trả lời

89

Hầu hết các trình gỡ lỗi hỗ trợ hiển thị trực tiếp các đối tượng. Chỉ cần sử dụng

console.log(obj); 

Tùy thuộc vào trình gỡ lỗi của bạn nhiều khả năng nhất sẽ hiển thị đối tượng trong bảng điều khiển dưới dạng cây thu gọn. Bạn có thể mở cây và kiểm tra đối tượng.

+74

Điều đáng nói là trong chrome (và có lẽ các trình duyệt khác) khi kết hợp với một chuỗi như sau: 'console.log (" object: "+ obj)' nó không hiển thị đối tượng, mà thay vào đó sẽ xuất "đối tượng: [Object obj] ". – Shahar

+14

@Shahar 'console.log (" đối tượng:% O ", obj)' (Chrome) hoặc 'console.log (" đối tượng:% o ", obj)' (Firefox | Safari) sẽ cung cấp cho bạn quyền truy cập vào chi tiết đối tượng , xem câu trả lời của tôi dưới đây. –

+1

@DaveAnderson chụp tốt cho định dạng đối tượng trong bảng điều khiển. – lekant

44

thử console.dir() thay vì console.log()

console.dir(obj); 

MDN nói console.dir() được hỗ trợ bởi:

  • FF8 +
  • IE9 +
  • Opera
  • Chrome
  • Safari
+0

Đáng yêu. Tôi không biết về console.dir – palaniraja

+1

Chỉ có sẵn trong IE9 + – jasonscript

+3

'console.dir()' cũng có sẵn trong FF8 +, Opera, Chrome và Safari: https://developer.mozilla.org/en-US/docs/ Web/API/console.dir – olibre

440

Bạn biết JSON là gì? Ký hiệu đối tượng JavaScript. Nó tạo ra một định dạng khá tốt cho các đối tượng.

JSON.stringify(obj) sẽ cho bạn quay lại biểu diễn chuỗi của đối tượng.

+33

wow, đó thực sự được gọi là stringify :) – Gourneau

+4

Tôi ngạc nhiên câu trả lời này là ở phía dưới ...... Đây phải là câu trả lời được chấp nhận :-) – Mingyu

+1

Điều gì xảy ra nếu bạn không muốn biểu diễn chuỗi, nhưng đúng hơn là đối tượng như nó sẽ xuất hiện trong trình soạn thảo mã? – SuperUberDuper

2

Chức năng đơn giản để cảnh báo nội dung của một đối tượng hoặc một mảng.
Gọi chức năng này với một mảng hoặc chuỗi hoặc một đối tượng mà nó cảnh báo nội dung.

Chức năng

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

Cách sử dụng

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

Các mã sau sẽ hiển thị dữ liệu json hoàn toàn trong hộp cảnh báo

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

Chỉ cần sử dụng

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

và bạn sẽ có được điều này trong chrome console:

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 
18

định dạng Sử dụng chuỗi;

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

Chrome có Format Specifiers như sau;

  • %s Định dạng giá trị dưới dạng chuỗi.
  • %d hoặc %i Định dạng giá trị là một số nguyên.
  • %f Định dạng giá trị dưới dạng giá trị dấu phẩy động.
  • %o Định dạng giá trị dưới dạng phần tử DOM có thể mở rộng (như trong bảng Phần tử).
  • %O Định dạng giá trị dưới dạng đối tượng JavaScript có thể mở rộng .
  • %c Định dạng chuỗi đầu ra theo kiểu CSS bạn cung cấp.

Firefox cũng có String Substitions có các tùy chọn tương tự.

  • %o Xuất một siêu liên kết đến đối tượng JavaScript. Nhấp vào liên kết sẽ mở một thanh tra.
  • %d hoặc %i Xuất một số nguyên. Định dạng chưa được hỗ trợ.
  • %s Xuất một chuỗi.
  • %f Xuất ra giá trị dấu phẩy động. Định dạng chưa được hỗ trợ.

Safari có printf style formatters

  • %d hoặc %i Integer
  • %[0.N]f giá trị Floating-point với N chữ số chính xác
  • %o Object
  • %s Chuỗi
+0

câu trả lời tham khảo tốt đẹp –

+0

% O thực sự hữu ích – everton

30

Nếu bạn muốn có một xinh đẹp, JSON multiline với thụt đầu dòng thì bạn có thể sử dụng JSON.stringify với lập luận thứ 3 của mình:

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

Ví dụ:

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

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

hoặc

JSON.stringify(obj, null, 4); 

sẽ cung cấp cho bạn kết quả như sau:

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

Trong một trình duyệt console.log(obj) làm việc thậm chí còn tốt hơn, nhưng trong một vỏ giao diện điều khiển (Node.js) nó không.

2

Nếu bạn muốn gỡ lỗi tại sao không sử dụng giao diện điều khiển debug

window.console.debug(jsonObject); 
18

để in JSON đối tượng phân tích cú pháp chỉ cần gõ

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

và bạn sẽ nhận ra rất rõ ràng

Các vấn đề liên quan