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?

Foralobo
la source

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.

Vlado Tesanovic
la source
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
75

Nous pouvons utiliser le tuyau angulaire json

{{ jsonObject | json }}
ganesh kalje
la source
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 }}
Vivek Doshi
la source
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>
Alexei
la source
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é"]
Harkirat Saluja
la source
5
<li *ngFor="let obj of myArray">{{obj | json}}</li>
Jaydeep Kataria
la source
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>
anacampesan
la source
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>
Arash
la source
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)
  });

la source
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