Comment afficher une représentation JSON et non [Object Object] à l'écran


122

Je crée une application AngularJS 2 avec la version bêta. Je souhaite afficher une représentation JSON d'un objet dans ma page, mais cela s'affiche [Object Object]et non {key1:value1 ....}

À partir du composant que je peux utiliser:

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

puis dans le modèle:

{{example}}

mais si j'ai un tableau d'objets et que je souhaite imprimer une liste de ces objets, comment puis-je le faire?

En utilisant:

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

donne quelque chose comme:

- [Objet Objet]
- [Objet Objet]
- [Objet Objet]
- [Objet Objet]

etc. Existe-t-il un moyen de les afficher au format JSON?

Réponses:


200

Si vous souhaitez voir ce que vous avez à l'intérieur d'un objet dans votre application Web, utilisez le tube json dans un modèle HTML de composant, par exemple:

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

Testé et valide avec Angular 4.3.2.


Merci, la pile json était dont j'avais besoin ... de angular 1 quelque chose a changé :)
foralobo

@foralobo Json Pipe était également disponible dans Angular 1;)
Ilker Cat

Impressionnant! Je vous remercie.
moreirapontocom


33

Pour parcourir l'objet JSON: Dans Angluar (6.0.0+), ils fournissent maintenant le tube keyvalue:

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

A LIRE AUSSI

Pour afficher simplement JSON

{{ object | json }}

1
Réponse Fav parce qu'il a les deux, et vous aurez probablement besoin des deux: "just json" pour des variables simples. Mais pour tout comme un contrôle de formulaire qui a des références circulaires, vous aurez besoin de la boucle présentée comme première option. Les deux sont toujours la syntaxe correcte dans Angular9.
Anders8

11

Le vidage du contenu de l'objet en tant que JSON peut être réalisé sans utiliser ngFor. Exemple:

Objet

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

Balisage

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

Sortie (parcourue par un embellisseur pour une meilleure lisibilité, sinon elle est sortie sur une seule ligne)

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

J'ai également découvert un formateur et une visionneuse JSON qui affiche des données JSON plus volumineuses plus lisibles (similaire à l'extension JSONView Chrome): https://www.npmjs.com/package/ngx-json-viewer

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

1
De plus, si vous passez de la balise div à la balise pré, vous la formatez correctement automatiquement.
Oddleif

@Oddleif - oui. J'ai également ajouté une référence à un visualiseur très utile qui devrait afficher les informations plus facilement.
Alexei

5

Il existe 2 façons d'obtenir les valeurs: -

  1. Accédez à la propriété de l'objet en utilisant la notation par points (obj.property).
  2. Accédez à la propriété de l'objet en passant la valeur clé par exemple obj ["propriété"]

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

Le même est déjà répondu, et vous devez utiliser un mot clé let avant obj dans la boucle * ngFor.
Alexis Toby

2

Mettre à jour les réponses des autres avec la nouvelle syntaxe:

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

0

si vous avez un tableau d'objets et que vous souhaitez les désérialiser dans compoent

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

puis dans le modèle

<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
Hé, pour améliorer ce que vous avez écrit, vous pouvez ajouter quelques explications à votre réponse pour vous assurer qu'un lecteur qui n'est pas très familier avec les concepts puisse comprendre vos décisions.
AplusKminus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.