Jak wyświetlić reprezentację JSON, a nie [Object Object] na ekranie


122

Tworzę aplikację AngularJS 2 w wersji beta. Chcę pokazać reprezentację obiektu w formacie JSON na mojej stronie, ale to pokazuje, [Object Object]a nie {key1:value1 ....}

Z komponentu, którego mogę użyć:

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

a następnie w szablonie:

{{example}}

ale jeśli mam tablicę obiektów i chciałbym wydrukować listę tych obiektów, jak mogę to zrobić?

Za pomocą:

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

powoduje coś takiego:

- [Obiekt Obiekt]
- [Obiekt Obiekt]
- [Obiekt Obiekt]
- [Obiekt Obiekt]

i tak dalej. Czy istnieje sposób, aby wyświetlić je jako JSON?

Odpowiedzi:


200

Jeśli chcesz zobaczyć, co masz wewnątrz obiektu w swojej aplikacji internetowej, użyj potoku json w szablonie HTML komponentu, na przykład:

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

Przetestowane i poprawne przy użyciu Angular 4.3.2.


Dziękuję, stosu json potrzebowałem ... od
angular

@foralobo Json Pipe był dostępny również w Angular 1;)
Ilker Cat

Niesamowite! Dziękuję Ci.
moreirapontocom


33

Aby zapętlić obiekt JSON: W Angluar (6.0.0+) teraz zapewniają potok keyvalue:

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

CZYTAJ TAKŻE

Aby po prostu wyświetlić JSON

{{ object | json }}

1
Ulubiona odpowiedź, ponieważ ma oba i prawdopodobnie będziesz potrzebować obu: „tylko json” dla prostych zmiennych. Ale w przypadku czegokolwiek takiego jak kontrolka formularza, która ma odwołania cykliczne, będziesz potrzebować pętli przedstawionej jako pierwsza opcja. Oba są nadal poprawną składnią w Angular9.
Anders

11

Zrzucanie zawartości obiektu w postaci JSON można uzyskać bez użycia ngFor. Przykład:

Obiekt

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

Narzut

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

Dane wyjściowe (przeszły przez upiększacz dla lepszej czytelności, w przeciwnym razie są wyświetlane w jednym wierszu)

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

Odkryłem również program formatujący JSON i przeglądarkę, która wyświetla większe dane JSON, bardziej czytelne (podobnie do rozszerzenia JSONView Chrome): https://www.npmjs.com/package/ngx-json-viewer

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

1
Ponadto, jeśli zmienisz tag z DIV na znacznik pre, automatycznie zostanie on odpowiednio sformatowany.
Oddleif

@Oddleif - tak. Dodałem również odniesienie do bardzo użytecznej przeglądarki, która powinna wygodniej wyświetlać informacje.
Alexei

5

Wartości można uzyskać na dwa sposoby: -

  1. Uzyskaj dostęp do właściwości obiektu przy użyciu notacji kropkowej (obj.property).
  2. Uzyskaj dostęp do właściwości obiektu, przekazując wartość klucza, na przykład obj ["property"]

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

To samo zostało już udzielone i musisz użyć słowa kluczowego let przed obj w pętli * ngFor.
Alexis Toby

2

Aktualizowanie odpowiedzi innych osób za pomocą nowej składni:

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

0

jeśli masz tablicę obiektów i chciałbyś deserializować je w komponencie

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

następnie w szablonie

<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
Hej, aby poprawić to, co napisałeś, możesz dodać wyjaśnienie do swojej odpowiedzi, aby upewnić się, że czytelnik, który nie jest zbyt zaznajomiony z koncepcjami, zrozumie Twoje decyzje.
AplusKminus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.