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?

foralobo
sumber

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.

Vlado Tesanovic
sumber
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
75

Kita bisa menggunakan pipa sudut json

{{ jsonObject | json }}
ganesh kalje
sumber
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 }}
Vivek Doshi
sumber
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>
Alexei
sumber
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"]
Harkirat Saluja
sumber
5
<li *ngFor="let obj of myArray">{{obj | json}}</li>
Jaydeep Kataria
sumber
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>
anacampesan
sumber
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>
Arash
sumber
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)
  });

sumber
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