วิธีแสดงการเป็นตัวแทน JSON ไม่ใช่ [Object Object] บนหน้าจอ


122

ฉันกำลังสร้างแอปพลิเคชัน AngularJS 2 ด้วยเวอร์ชันเบต้า ฉันต้องการแสดงการแสดง JSON ของออบเจ็กต์ในเพจของฉัน แต่มันแสดง[Object Object]และไม่ แสดง{key1:value1 ....}

จากส่วนประกอบที่ฉันสามารถใช้ได้:

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

จากนั้นในเทมเพลต:

{{example}}

แต่ถ้าฉันมีอาร์เรย์ของอ็อบเจ็กต์และต้องการพิมพ์รายการอ็อบเจ็กต์เหล่านี้ฉันจะทำอย่างไร?

โดยใช้:

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

ผลลัพธ์ในบางสิ่งเช่น:

- [วัตถุวัตถุ]
- [วัตถุวัตถุ]
- [วัตถุวัตถุ]
- [วัตถุวัตถุ]

และอื่น ๆ มีวิธีแสดงเป็น JSON หรือไม่?

คำตอบ:


200

หากคุณต้องการดูว่าคุณมีอะไรอยู่ภายในออบเจ็กต์ในเว็บแอปของคุณให้ใช้ท่อ jsonในเทมเพลต HTML ของคอมโพเนนต์เช่น

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

ทดสอบและใช้ได้โดยใช้ Angular 4.3.2


ขอบคุณกอง json ที่ฉันต้องการ ... จากเชิงมุม 1 บางสิ่งเปลี่ยนไป :)
foralobo

@foralobo Json Pipe มีจำหน่ายใน Angular 1 เช่นกัน;)
Ilker Cat

! น่ากลัว ขอบคุณ.
moreirapontocom


33

ในการวนซ้ำ JSON Object: ใน Angluar (6.0.0+) ตอนนี้พวกเขามีไปป์keyvalue:

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

อ่านเพิ่มเติม

เพื่อแสดง JSON

{{ object | json }}

1
คำตอบ Fav เพราะมีทั้งสองอย่างและคุณอาจต้องใช้ทั้งสองอย่าง: "just json" สำหรับตัวแปรง่ายๆ แต่สำหรับสิ่งอื่น ๆ เช่นตัวควบคุมแบบฟอร์มที่มีการอ้างอิงแบบวงกลมคุณจะต้องใช้ลูปที่แสดงเป็นตัวเลือกแรก ทั้งสองยังคงเป็นไวยากรณ์ที่ถูกต้องใน Angular9
Anders8

11

ทิ้งเนื้อหาวัตถุ JSON ngForสามารถทำได้โดยไม่ต้องใช้ ตัวอย่าง:

วัตถุ

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

มาร์กอัป

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

เอาต์พุต (วิ่งผ่านเครื่องตกแต่งเพื่อความสามารถในการอ่านที่ดีขึ้นมิฉะนั้นจะส่งออกเป็นแถวเดียว)

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

ฉันได้ค้นพบตัวจัดรูปแบบ JSON และวิวเวอร์ที่แสดงข้อมูล JSON ขนาดใหญ่อ่านได้มากขึ้น (คล้ายกับส่วนขยาย JSONView Chrome): https://www.npmjs.com/package/ngx-json-viewer

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

1
นอกจากนี้หากคุณเปลี่ยนจาก div เป็นแท็กก่อนคุณจะได้รับการจัดรูปแบบอย่างถูกต้องโดยอัตโนมัติ
Oddleif

@Oddleif - ครับ ฉันยังได้เพิ่มการอ้างอิงไปยังโปรแกรมดูที่มีประโยชน์มากซึ่งควรแสดงข้อมูลได้สะดวกยิ่งขึ้น
Alexei

5

มี 2 ​​วิธีในการรับค่า: -

  1. เข้าถึงคุณสมบัติของวัตถุโดยใช้สัญลักษณ์จุด (obj.property)
  2. เข้าถึงคุณสมบัติของวัตถุโดยการส่งผ่านค่าคีย์ตัวอย่างเช่น obj ["property"]

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

คำตอบเดียวกันนี้ได้รับคำตอบแล้วและคุณต้องใช้คำหลัก let ก่อน obj ใน * ngFor loop
Alexis Toby

2

การอัปเดตคำตอบของผู้อื่นด้วยไวยากรณ์ใหม่:

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

0

หากคุณมีอาร์เรย์ของอ็อบเจ็กต์และคุณต้องการยกเลิกการกำหนดค่าเริ่มต้นด้วยองค์ประกอบ

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

จากนั้นในเทมเพลต

<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
เฮ้เพื่อปรับปรุงสิ่งที่คุณเขียนคุณสามารถเพิ่มคำอธิบายบางอย่างในคำตอบของคุณเพื่อให้แน่ใจว่าผู้อ่านที่ไม่ค่อยคุ้นเคยกับแนวคิดจะเข้าใจการตัดสินใจของคุณ
AplusKminus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.