Как отобразить объекты JSON с разными именами в модель TS? - PullRequest
0 голосов
/ 08 января 2019

Я использую последнюю версию Angular (7.x.x). У меня есть JSON API в виде:

{
  "objectA": {
  "a": {
    "aa": "hello",
    "ab": "xyz"
   },
"b": null,
"c": {
  "ca": null,
  "cb": null,
  "cc": null,
  "cd": "hi",
  "ce": null,
  "cf": null
    }
 },

  "objectB": {
  "a": {
    "aa": "hey",
    "ab": "abc"
   },
  "b": null,
  "c": {
    "ca": null,
    "cb": null,
    "cc": null,
    "cd": null,
    "ce": null,
    "cf": null
  }
}, ...}

Все мои объекты имеют одинаковую структуру. Теперь я хочу отобразить их в объект машинописного текста.

Моя модель выглядит так:

 export interface MyObject {
 name: string;
 a: A;
 b?: any;
 c: C;}

 export interface C{
 ca?: any;
 cb?: any;
 cc?: any;
 cd?: any;
 ce?: any;
 cf?: any;}

 export interface A {
 aa: string;
 ab: string;
 ac?: string;}

Как я могу получить имя объекта типа "objectA" в переменную "name" интерфейса "Object". В результате я хочу вернуть массив объектов.

Мой сервис:

 getResults(): Observable<MyObject[]> {
return this.http.get<MyObject[]>(this.url, {
  headers: this.headers
 })

Мой компонент:

ngOnInit() {
this.getObjects();}

getObjects(): void {
this.service.getResults()
  .subscribe(data=> {
    this.objects= data;
  });}

Кто-нибудь может мне помочь? Заранее спасибо.

1 Ответ

0 голосов
/ 08 января 2019
getResults(): Observable<MyObject[]> {
    return this.http.get<ApiResponse>[]>(this.url, {
        headers: this.headers
    }).pipe(map((response: ApiResponse) => {
        const myObjs: MyObject[] = [];
        Object.keys(response).forEach((key) => {
            // Now you have the "name" value
            myObjs.push({
                ...response[key],
                name: key
            };
        });
        return myObjs;
    }));
}

Object.keys () - это ключ к получению значения, которое вы хотите ввести в имя. Я не проверял это в работающей среде, но это приблизит вас к вашему решению. Вам понадобится интерфейс для представления ответа API. Это то, что вы действительно просите от http.get. Затем вы сопоставляете его с ответом MyObject [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...