Angular konvertera json till en lista med objekt


Jag får nedanstående JSON-data från en REST-webbtjänst. Jag försöker lista ut hur jag kan konvertera det till en array av objekt.

{
   "John": "Buttler"
   "Hugh": "Martin"
    .
    .
    .
}

Jag försöker konvertera till nedanstående objekt. I princip förväntar jag mig Person[]. I ovanstående JSON är John och Hugh förnamn och Buttler och Martin är efternamn.

export class Person{
    firstName: string;
    lastName: string;
}

Jag kan konvertera om jag får JSON som nedan

[
{
   "firstName": "John"
   "lastName:: "Buttler"
},
{
   "firstName": "Hugh"
   "lastName:: "Martin"
}
]

Angular-tjänstkoden:

  findAllPersons(): Observable<Person[]> {
    return this.httpClient.get<Person[]>('url');
  }

Svar #1

Du måste bearbeta det mottagna svaret i det format du behöver.

      findAllPersons(): Observable<Person[]> {
        return this.httpClient.get<object>('url');
      }
    
    
     findAllPersons().subscribe((response) =>{
        let array = [];
        for(let key in response){
            let p = new Person();
            p.firstName = key;
            p.lastName = response[key];
            array.push(p);
        } 
        console.log(array); // your required array
     });

Svar #2

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

interface NameData {
  [firstName: string]: string;
}

interface Person {
  firstName: string;
  lastName: string;
}

@Injectable()
class PersonService {
  constructor(private httpClient: HttpClient) {}

  findAllPersons(): Observable<Person[]> {
    return this.httpClient.get<NameData>('url').pipe(
      map((v) =>
        Object.entries(v).map(([firstName, lastName]) => ({
          firstName,
          lastName,
        }))
      )
    );
  }
}

Relaterade artiklar