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.