RxJs - Observable - Как получить данные из объекта JSON - PullRequest
0 голосов
/ 02 мая 2018

У меня есть ответ JSON, наблюдаемый, как показано ниже. Я хотел бы получить данные из этих наблюдаемых в двух отдельных массивах, таких как [abc, xyz] и [aa, bb]. Возможно ли использовать rx observables map и switchmap для получения двух массивов в одной наблюдаемой.

this.data$ = Observable.of({
      "data": [
        {
          "firstname": "abc",
          "lastname": "aa"
        },
         {
          "firstname": "xyz",
          "lastname": "bb"
        }
      ]
    })  .map(res => res.data)
      .switchMap(dataArray => {
        return Observable.from(dataArray);
      })
      .map((arrayResp: any) => {
        return ( arrayResp.firstname);
      }).toArray()

Здесь я могу получить только один массив. Можно ли получить только два массива в этом методе.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

у вас есть строка json, поэтому вы должны сделать это в вашем switchMap методе

 .switchMap(dataArray => {
        return Observable.from(JSON.parse( dataArray));
      })

или вы можете сделать это также

this.data$ = Observable.of(JSON.parse(`{
      "data": [
        {
          "firstname": "abc",
          "lastname": "aa"
        },
         {
          "firstname": "xyz",
          "lastname": "bb"
        }
      ]
    }`).subscribe(res=> console.log(res.data));
0 голосов
/ 02 мая 2018

Вы можете просто использовать функцию карты массивов:

.pipe(map(res => res.data),
    map(a => {
        return {
            firstnames: a.map(_ => _.firstname),
            lastnames: a.map(_ => _.lastname)
        }
    }));

Вот пример работы.

...