So zeigen Sie eine JSON-Darstellung und nicht [Objektobjekt] auf dem Bildschirm an


122

Ich mache eine AngularJS 2-Anwendung mit der Beta-Version. Ich möchte eine JSON-Darstellung eines Objekts auf meiner Seite anzeigen, aber es wird angezeigt [Object Object]und nicht {key1:value1 ....}

Von der Komponente kann ich verwenden:

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

und dann in der Vorlage:

{{example}}

Aber wenn ich eine Reihe von Objekten habe und eine Liste dieser Objekte drucken möchte, wie kann ich das tun?

Verwenden von:

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

ergibt so etwas wie:

- [Objekt Objekt]
- [Objekt Objekt]
- [Objekt Objekt]
- [Objekt Objekt]

und so weiter. Gibt es eine Möglichkeit, diese als JSON anzuzeigen?

Antworten:


199

Wenn Sie sehen möchten, was sich in einem Objekt in Ihrer Webanwendung befindet, verwenden Sie die JSON-Pipe in einer HTML-Komponentenvorlage, zum Beispiel:

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

Getestet und gültig mit Angular 4.3.2.


Danke, der json Haufen war ich brauche ... von Winkel 1 etwas geändert :)
Foralobo

@foralobo Json Pipe war auch in Angular 1 verfügbar;)
Ilker Cat

Genial! Danke dir.
moreirapontocom


31

So durchlaufen Sie das JSON-Objekt: In Angluars (6.0.0+) stellen sie jetzt die Pipe bereit keyvalue:

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

LESEN SIE AUCH

Nur JSON anzeigen

{{ object | json }}

1
Lieblingsantwort, weil es beides hat und Sie wahrscheinlich beides brauchen: "just json" für einfache Variablen. Für ein Formularsteuerelement mit Zirkelverweisen muss jedoch die Schleife als erste Option angezeigt werden. Beide sind in Angular9 immer noch korrekt.
Anders8

11

Das Speichern von Objektinhalten als JSON kann ohne Verwendung erreicht werden ngFor. Beispiel:

Objekt

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>

Ausgabe (wurde zur besseren Lesbarkeit durch einen Verschönerer geleitet, andernfalls wird sie in einer einzelnen Zeile ausgegeben)

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

Ich habe auch einen JSON-Formatierer und -Viewer entdeckt, der größere JSON-Daten besser lesbar anzeigt (ähnlich der JSONView Chrome-Erweiterung): https://www.npmjs.com/package/ngx-json-viewer

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

1
Wenn Sie von div zu pre tag wechseln, wird es automatisch richtig formatiert.
Oddleif

@Oddleif - ja. Ich habe auch einen Verweis auf einen sehr nützlichen Viewer hinzugefügt, der die Informationen bequemer anzeigen soll.
Alexei

5

Es gibt zwei Möglichkeiten, wie Sie die Werte erhalten können:

  1. Greifen Sie mit der Punktnotation (obj.property) auf die Eigenschaft des Objekts zu.
  2. Greifen Sie auf die Eigenschaft des Objekts zu, indem Sie den Schlüsselwert übergeben, z. B. obj ["Eigenschaft"].

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

Dasselbe wird bereits beantwortet, und Sie müssen vor obj in der * ngFor-Schleife ein let-Schlüsselwort verwenden.
Alexis Toby

2

Aktualisieren der Antworten anderer mit der neuen Syntax:

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

0

Wenn Sie ein Objektarray haben und diese in compoent deserialisieren möchten

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

dann in Vorlage

<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
Um das, was Sie geschrieben haben, zu verbessern, können Sie Ihrer Antwort eine Erklärung hinzufügen, um sicherzustellen, dass ein Leser, der mit den Konzepten nicht sehr vertraut ist, Ihre Entscheidungen verstehen kann.
AplusKminus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.