Angular将JSON转换为对象数组

4
我从一个REST Web服务中获取了以下JSON数据。我正在尝试弄清楚如何将其转换为对象数组。
{
   "John": "Buttler"
   "Hugh": "Martin"
    .
    .
    .
}

我尝试将对象转换成下面的形式,基本上我希望得到Person[]。在上面的JSON中,John、Hugh是名字,Buttler、Martin是姓氏。
export class Person{
    firstName: string;
    lastName: string;
}

如果我得到以下JSON,我可以进行转换:

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

Angular服务代码:

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

4

您需要将收到的响应以所需的格式进行处理。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接