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?

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.


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


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 }}

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>

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"]

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

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>

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>

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
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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.