Cómo mostrar una representación JSON y no [Object Object] en la pantalla

122

Estoy creando una aplicación AngularJS 2 con la versión beta. Quiero mostrar una representación JSON de un objeto en mi página, pero se muestra [Object Object]y no {key1:value1 ....}

Desde el componente que puedo usar:

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

y luego en la plantilla:

{{example}}

pero si tengo una matriz de objetos y me gustaría imprimir una lista de estos objetos, ¿cómo puedo hacerlo?

Utilizando:

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

resulta en algo como:

- [Objeto Objeto]
- [Objeto Objeto]
- [Objeto Objeto]
- [Objeto Objeto]

y así. ¿Hay alguna forma de mostrarlos como JSON?

foralobo
fuente

Respuestas:

199

Si desea ver lo que tiene dentro de un objeto en su aplicación web, use la tubería json en una plantilla HTML de componente, por ejemplo:

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

Probado y válido con Angular 4.3.2.

Vlado Tesanovic
fuente
Gracias, la pila json era la que necesitaba ... de angular 1 algo cambió :)
foralobo
@foralobo Json Pipe también estaba disponible en Angular 1;)
Ilker Cat
¡Increíble! Gracias.
moreirapontocom
75

Podemos usar json de tubería angular

{{ jsonObject | json }}
ganesh kalje
fuente
33

Para recorrer el objeto JSON: en Angluar (6.0.0+), ahora proporcionan la tubería keyvalue:

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

LEA TAMBIÉN

Para mostrar JSON

{{ object | json }}
Vivek Doshi
fuente
1
Fav answer porque tiene ambos, y probablemente necesitará ambos: "solo json" para variables simples. Pero para cualquier cosa como un control de formulario que tenga referencias circulares, necesitará el ciclo presentado como la primera opción. Ambos siguen siendo la sintaxis correcta en Angular9.
Anders8
11

El volcado del contenido del objeto como JSON se puede lograr sin usar ngFor. Ejemplo:

Objeto

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

Margen

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

Salida (se ejecutó a través de un embellecedor para una mejor legibilidad, de lo contrario, se muestra en una sola fila)

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

También descubrí un formateador y visor JSON que muestra datos JSON más grandes y más legibles (similar a la extensión JSONView Chrome): https://www.npmjs.com/package/ngx-json-viewer

<ngx-json-viewer [json]="someObject" [expanded]="false"></ngx-json-viewer>
Alexei
fuente
1
Además, si cambia de div a pre etiqueta, se formatea correctamente automáticamente.
Oddleif
@Oddleif - sí. También agregué una referencia a un visor muy útil que debería mostrar la información de manera más conveniente.
Alexei
5

Hay 2 formas de obtener los valores: -

  1. Acceda a la propiedad del objeto mediante la notación de puntos (obj.property).
  2. Acceda a la propiedad del objeto pasando un valor clave, por ejemplo, obj ["propiedad"]
Harkirat Saluja
fuente
5
<li *ngFor="let obj of myArray">{{obj | json}}</li>
Jaydeep Kataria
fuente
Lo mismo ya está respondido, y debe usar una palabra clave let antes de obj en el bucle * ngFor.
Alexis Toby
2

Actualización de las respuestas de otros con la nueva sintaxis:

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

si tiene una matriz de objetos y le gustaría deserializarlos en componente

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

luego en plantilla

<ul>
   <li *ngFor="obj of example">{{obj}}</li>
</ul>
Arash
fuente
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)
  });

fuente
3
Oye, para mejorar lo que escribiste, podrías agregar alguna explicación a tu respuesta para asegurarte de que un lector que no esté muy familiarizado con los conceptos pueda entender tus decisiones.
AplusKminus