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,
}))
)
);
}
}
