【问题标题】:RxJs- Observable - How to fetch data from JSON ObjectRxJs- Observable - 如何从 JSON 对象中获取数据
【发布时间】:2018-10-12 04:40:58
【问题描述】:

我有一个 JSON 响应 observable,如下所示。我想从这个 observables 中获取两个单独的数组中的数据,例如 [abc,xyz] 和 [aa,bb]。是否可以使用 rx observables map 和 switchmap 在同一个 observable 中获取两个数组。

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()

这里我只能得到一个数组。是不是只能用这个方法得到两个数组。

【问题讨论】:

  • 你只得到一个对象,你想得到所有对象的数组吗?是你的意思吗?
  • 是的,我想分别获取名字和姓氏数组
  • 这对你有用吗?

标签: javascript typescript rxjs observable


【解决方案1】:

您可以简单地使用数组映射函数:

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

Here is a running example.

【讨论】:

  • 如果没有缓冲区计数我们不能这样做吗?
  • 抱歉,我什至无法理解为什么我最终会为这个简单的任务做出如此复杂的事情。我编辑了我的答案和stackblitz。
  • 感谢您的快速回复!
【解决方案2】:

你有 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));

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多