In đối tượng phân tích JSON?


200

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.parseBây giờ tôi muốn in đối tượng đó để tôi có thể gỡ lỗi nó (có gì đó không ổn với chức năng). Khi tôi làm như sau ...

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

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


5
như một sidenote, for (property in obj) sẽ liệt kê tất cả các thuộc tính, ngay cả những thuộc tính được kế thừa. Vì vậy, bạn sẽ nhận được rất nhiều cominng ngoại lai cho Object.prototype và bất kỳ 'lớp mẹ' nào. Đ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

Câu trả lời:


124

Hầu hết các bảng điều khiển gỡ lỗi hỗ trợ hiển thị các đối tượng trực tiếp. Chỉ dùng

console.log(obj);

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


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

24
@Shahar console.log("object: %O", obj)(Chrome) hoặc console.log("object: %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.
Dave Anderson

1
@DaveAnderson bắn tốt cho định dạng đối tượng trong bàn điều khiển.
lekant

@Shahar cảm ơn, bạn là thông tin tôi cần. Nên được thêm vào câu trả lời.
Leo Flaherty

3
Ngoài phương thức của @DaveAnderson, sử dụng dấu phẩy để tách các chuỗi khỏi các đối tượng cũng có thể hoạt động:console.log("My object: ", obj)
Shahar

571

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

JSON.stringify(obj) sẽ cung cấp cho bạn một đại diện chuỗi của đối tượng.


12
Tôi ngạc nhiên câu trả lời này ở 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, mà là đối tượng như nó sẽ xuất hiện trong trình chỉnh sửa mã?
SuperUberDuper

5
@SuperUberDuper: ... Sau đó, bạn sẽ không cố gắng xây dựng một đại diện chuỗi, bây giờ, bạn sẽ làm. :)
cHao 8/12/2015

Tôi tin rằng SuperUberDuper đã hỏi liệu đối tượng có thể được ghi lại hoặc xem mà không chuyển đổi nó thành một chuỗi. Nếu xem trong trình duyệt, DOM cần một phần tử, bạn có thể xâu chuỗi json vì vậy và đặt một phần tử nội dung trongHTML thành chuỗi đó để xem nó trên trang.
jasonleonhard

Ví dụ: nhập Json từ './data.json'; var el = document.createEuity ('div'); el.innerHTML = JSON.opesify (Json);
jasonleonhard

54

cố gắng console.dir()thay vìconsole.log()

console.dir(obj);

MDN cho biết console.dir()được hỗ trợ bởi:

  • FF8 +
  • IE9 +
  • Opera
  • Trình duyệt Chrome
  • Safari

1
Chỉ khả dụng trong IE9 +
jasonscript

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

Tuyệt quá! Đây là giải pháp tốt nhất cho tôi. Cảm ơn.
Hoàng Lê

1
nút js thì sao?
Xsmael 3/03/2016

tốt, nhưng không hỗ trợ nối chuỗi như log ("chuỗi" + biến)
Nassim

47

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

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

Ví dụ:

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

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

hoặc là

JSON.stringify(obj, null, 4);

sẽ 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) thậm chí còn làm việc tốt hơn, nhưng trong bảng điều khiển shell (node.js) thì không.


40

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

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

và bạn sẽ nhận được đầu ra rất rõ ràng


25

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

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

Chrome có Định dạng định dạng với các mục sau;

  • %s Định dạng giá trị dưới dạng chuỗi.
  • %dhoặc %iĐịnh dạng giá trị dưới dạng 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 Thành phần).
  • %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ó các Chuỗi thay thế có các tùy chọn tương tự.

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

Safari có định dạng kiểu printf

  • %dhoặc %isố nguyên
  • %[0.N]f Giá trị dấu phẩy động với N chữ số chính xác
  • %o Vật
  • %s Chuỗi

1
câu trả lời tham khảo hay
David

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

4

Đẹp và đơn giản:

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

1
bạn có thể vui lòng mô tả% O dùng để làm gì không? nó có nên là O cụ thể không? - giải pháp của bạn hoạt động như một bùa mê
Anthonius

O là viết tắt của đối tượng, miễn là đối tượng có thể được in dưới dạng một chuỗi, nó sẽ được in không có vấn đề. Điều này đã giúp tôi khắc phục sự cố trong nhiều trường hợp mà tôi không chắc là lỗi ở đâu
mbenhalima

Tôi quên thông báo ở đây, thực sự chúng tôi không cần sử dụng% O. Chúng tôi có thể trực tiếp sử dụng console.log ("object:", obj) cảm ơn bạn @mbenhalima
Anthonius

3

Chỉ dùng

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

và bạn sẽ nhận được điều này trong bảng điều khiển 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

Hàm đơ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 hàm này bằng 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);
    }
}

Sử dụng

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

2

Đoạn mã sau sẽ hiển thị dữ liệu json hoàn chỉnh 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

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

window.console.debug(jsonObject);

0

Nếu bạn đang làm việc trong js trên máy chủ, chỉ cần thêm một chút thể dục dụng cụ đi một chặng đường dài ... Đây là ppose của tôi (máy in đẹp trên máy chủ):

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

công việc tạo ra thứ gì đó mà tôi thực sự có thể đọc được khi viết mã máy chủ.


0

Tôi không biết làm thế nào nó không bao giờ được thực hiện chính thức, nhưng tôi đã thêm jsonphương pháp của riêng mình để consolephản đối việc in nhật ký được xâu chuỗi dễ dàng hơn:

Quan sát các đối tượng (không phải là nguyên thủy) trong javascript giống như cơ học lượng tử..những gì bạn "đo lường" có thể không phải là trạng thái thực, đã thay đổi.

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

Nhiều lần cần phải xem phiên bản được xâu chuỗi của Đối tượng vì việc in nó như hiện tại (Đối tượng thô) sẽ in phiên bản "trực tiếp" của đối tượng bị thay đổi khi chương trình tiến triển và sẽ không phản ánh trạng thái của đối tượng tại thời điểm đăng nhập, ví dụ:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.