角度2可观察的json误差

时间:2017-03-31 22:29:38

标签: json angular

import { Injectable } from '@angular/core';
import { Http,Response } from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';


@Injectable()
export class CommentService{
private _url :string ="https://jsonplaceholder.typicode.com/posts"
   constructor(private _http:Http){}
  // method to fetch CommentS from a api service 
 getComments(){

 return this._http.get(this._url)
        .map((response:Response)=> response.json())
        .catch(this._errorHandler);

  }

  _errorHandler(error:Response){
       console.error(error);
     return Observable.throw(error ||"Server Error");

 }

}

以上代码适用于此网址https://jsonplaceholder.typicode.com/posts

但不适用于此网址http://ergast.com/api/f1/2016/driverStandings.json

任何想法...... TIA

2 个答案:

答案 0 :(得分:0)

要使第二个工作,您需要使用

获取数据
NSWindow

因为在这个working one中,数据是在对象数组中的类型含义

enter image description here

does not work完全是单个对象的那个

enter image description here

答案 1 :(得分:0)

Aravind在这里是正确的轨道,但MRData区分大小写,并且映射有点偏。在这里映射响应的正确方法是:

return this._http.get(this._url)
    .map((response:Response)=> response.json().MRData)
    .catch(this._errorHandler);
}

您的组件:

getData() {
  this.service.getData()
    .subscribe(data => {
      this.data = data;
    });
}

然后您可以访问数据,例如:

<div>
  <b>Series:</b> {{data?.series}}<br>
  <a><b>Url:</b> {{data?.url}}</a>
</div>

然后您的响应中似乎有很多嵌套对象,因此这可能会对您有所帮助:Access / process (nested) objects, arrays or JSON

这是一个带有模拟JSON的演示,但我确实尝试了你提供的网址并且收到的数据很好。所以复制plunker应该在您的应用程序中正常工作:)

DEMO