Bagaimana menampilkan representasi JSON dan bukan [Objek Objek] di layar


122

Saya sedang membuat aplikasi AngularJS 2 dengan versi beta. Saya ingin menunjukkan representasi JSON dari suatu objek di halaman saya, tetapi itu menunjukkan [Object Object]dan tidak {key1:value1 ....}

Dari komponen yang dapat saya gunakan:

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

lalu di template:

{{example}}

tetapi jika saya memiliki array objek dan ingin mencetak daftar objek ini, bagaimana saya bisa melakukannya?

Menggunakan:

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

menghasilkan sesuatu seperti:

- [Objek Objek]
- [Objek Objek]
- [Objek Objek]
- [Objek Objek]

dan seterusnya. Apakah ada cara untuk menampilkannya sebagai JSON?

Jawaban:


200

Jika Anda ingin melihat apa yang Anda miliki di dalam sebuah objek di aplikasi web Anda, gunakan pipa json di template HTML komponen, misalnya:

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

Diuji dan valid menggunakan Angular 4.3.2.


Terima kasih, tumpukan json yang saya butuhkan ... dari sudut 1 ada yang berubah :)
foralobo

@foralobo Json Pipe juga tersedia dalam Angular 1;)
Ilker Cat

Hebat! Terima kasih.
moreirapontocom


33

Untuk melakukan loop melalui JSON Object: In Angluar's (6.0.0+), sekarang mereka menyediakan pipa keyvalue:

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

JANGAN BACA JUGA

Untuk hanya menampilkan JSON

{{ object | json }}

1
Jawaban Fav karena memiliki keduanya, dan Anda mungkin membutuhkan keduanya: "just json" untuk variabel sederhana. Tetapi untuk apa pun seperti kontrol bentuk yang memiliki referensi melingkar, Anda akan memerlukan loop yang disajikan sebagai opsi pertama. Keduanya masih sintaks yang benar di Angular9.
Anders8

11

Membuang konten objek sebagai JSON dapat dilakukan tanpa menggunakan ngFor. Contoh:

Obyek

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

Markup

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

Output (dijalankan melalui beautifier untuk pembacaan yang lebih baik, jika tidak maka output dalam satu baris)

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

Saya juga menemukan pemformat dan penampil JSON yang menampilkan data JSON yang lebih besar sehingga lebih mudah dibaca (mirip dengan ekstensi Chrome JSONView): https://www.npmjs.com/package/ngx-json-viewer

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

1
Juga, jika Anda mengubah dari div ke tag awal, Anda akan memformatnya dengan benar secara otomatis.
Oddleif

@Oddleif - ya. Saya juga menambahkan referensi ke penampil yang sangat berguna yang seharusnya menampilkan informasi dengan lebih nyaman.
Alexei

5

Ada 2 cara untuk mendapatkan nilai: -

  1. Akses properti objek menggunakan notasi titik (obj.property).
  2. Akses properti objek dengan memasukkan nilai kunci misalnya obj ["property"]

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

Hal yang sama sudah dijawab, dan Anda harus menggunakan kata kunci let sebelum obj di * ngFor loop.
Alexis Toby

2

Memperbarui jawaban orang lain dengan sintaks baru:

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

0

jika Anda memiliki berbagai objek dan Anda ingin melakukan deserialisasi objek tersebut dalam bentuk komponen

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

lalu di template

<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
Hai, untuk memperbaiki apa yang Anda tulis, Anda bisa menambahkan beberapa penjelasan pada jawaban Anda untuk memastikan bahwa pembaca yang tidak terlalu paham dengan konsep dapat memahami keputusan Anda.
AplusKminus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.