Cách hiển thị biểu diễn JSON chứ không phải [Đối tượng] trên màn hình


122

Tôi đang tạo một ứng dụng AngularJS 2 với phiên bản beta. Tôi muốn hiển thị đại diện JSON của một đối tượng trong trang của mình, nhưng nó hiển thị [Object Object]và không {key1:value1 ....}

Từ thành phần tôi có thể sử dụng:

get example() {return JSON.stringify(this.myObject)};

và sau đó trong mẫu:

{{example}}

Nhưng nếu tôi có một mảng các đối tượng và muốn in một danh sách các đối tượng này, làm thế nào tôi có thể làm điều đó?

Sử dụng:

<ul>
   <li *ngFor="#obj of myArray">{{obj}}</li>
</ul>

kết quả trong một cái gì đó như:

- [Đối tượng]
- [Đối tượng]
- [Đối tượng]
- [Đối tượng]

và như thế. Có cách nào để hiển thị chúng dưới dạng JSON không?

Câu trả lời:


199

Nếu bạn muốn xem những gì bạn có trong một đối tượng trong ứng dụng web của bạn, thì hãy sử dụng ống json trong mẫu HTML thành phần, ví dụ:

<li *ngFor="let obj of myArray">{{obj | json}}</li>

Đã kiểm tra và hợp lệ bằng cách sử dụng Angular 4.3.2.


Cảm ơn bạn, đống json là tôi cần ... từ góc 1 đã thay đổi :)
foralobo

@foralobo Json ống cũng có sẵn trong Angular 1;)
Ilker Cat

Tuyệt vời! Cảm ơn bạn.
moreirapontocom


31

Để lặp qua đối tượng JSON: Trong Angluar's (6.0.0+), bây giờ họ cung cấp đường ống keyvalue:

<div *ngFor="let item of object| keyvalue">
  {{ item.key }} - {{ item.value }}
</div>

ĐỪNG ĐỌC

Để chỉ hiển thị JSON

{{ object | json }}

1
Fav trả lời vì nó có cả hai, và bạn có thể sẽ cần cả hai: "just json" cho các biến đơn giản. Nhưng đối với bất cứ điều gì như điều khiển biểu mẫu có tham chiếu vòng tròn, bạn sẽ cần vòng lặp được trình bày làm tùy chọn đầu tiên. Cả hai vẫn đúng cú pháp trong Angular9.
Anders8

11

Đổ nội dung đối tượng như JSON có thể đạt được mà không cần sử dụng ngFor. Thí dụ:

Vật

export class SomeComponent implements OnInit {
    public theObject: any = {
        simpleProp: 1,
        complexProp: {
            InnerProp1: "test1",
            InnerProp2: "test2"
        },
        arrayProp: [1, 2, 3, 4]
    };

Đánh dấu

<div [innerHTML]="theObject | json"></div>

Đầu ra (chạy qua trình làm đẹp để dễ đọc hơn, nếu không thì là đầu ra trong một hàng)

{
  "simpleProp": 1,
  "complexProp": {
    "InnerProp1": "test1",
    "InnerProp2": "test2"
  },
  "arrayProp": [
    1,
    2,
    3,
    4
  ]
}

Tôi cũng đã phát hiện ra một trình định dạng và trình xem JSON hiển thị dữ liệu JSON lớn hơn dễ đọc hơn (tương tự như tiện ích mở rộng JSONView Chrome): https://www.npmjs.com/package/ngx-json-viewer

<ngx-json-viewer [json]="someObject" [expanded]="false"></ngx-json-viewer>

1
Ngoài ra, nếu bạn thay đổi từ div sang thẻ trước, bạn sẽ tự động định dạng đúng.
Oddleif

@Oddleif - vâng. Tôi cũng đã thêm một tham chiếu đến một trình xem rất hữu ích để hiển thị thông tin thuận tiện hơn.
Alexei

5

Có 2 cách để bạn có thể nhận các giá trị: -

  1. Truy cập thuộc tính của đối tượng bằng cách sử dụng ký hiệu dấu chấm (obj.property).
  2. Truy cập thuộc tính của đối tượng bằng cách chuyển vào giá trị khóa, ví dụ obj ["property"]

5
<li *ngFor="let obj of myArray">{{obj | json}}</li>

Điều tương tự đã được trả lời và bạn phải sử dụng từ khóa let trước khi obj trong vòng lặp * ngFor.
Alexis Toby

2

Cập nhật câu trả lời của người khác bằng cú pháp mới:

<li *ngFor="let obj of myArray">{{obj | json}}</li>

0

nếu bạn có mảng đối tượng và bạn muốn giải tuần tự hóa chúng trong compoent

get example() { this.arrayOfObject.map(i => JSON.stringify (i) ) };

sau đó trong mẫu

<ul>
   <li *ngFor="obj of example">{{obj}}</li>
</ul>

0
this.http.get<any>('http://192.168.1.15:4000/GetPriority')
  .subscribe(response => 
  {
  this.records=JSON.stringify(response) // impoprtant
  console.log("records"+this.records)
  });

3
Này, để cải thiện những gì bạn đã viết, bạn có thể thêm một số lời giải thích cho câu trả lời của mình để đảm bảo rằng một người đọc không quen thuộc với các khái niệm có thể hiểu quyết định của bạn.
AplusKminus
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.