2017-03-20 46 views
0

我正在使用angular2 typeScript從webservice.I獲取json返回通過調用get可以從WebService獲取值,但我無法獲取JSON組件。例如,我想要獲取返回的JSON的狀態。我可以得到整個JSON,但不是JSON的確切狀態。 您可以看到下面webservice返回的示例代碼和JSON。如何獲取JSON字符串的組件通過webservice請求返回

問候 的Alper

示例代碼:

this.http.get(this.webServiceUrlGet) 
    .subscribe(
    function (data) { 
     this.tradeShows = JSON.stringify(data); 
     console.log(this.tradeShows); 

    }, 
    error => this.errorMessage = <any>error); 

    JSON : 
    "_body":"{\n \"args\": {}, \n \"headers\": {\n \"Accept\":  \"application/json, text/plain, */*\", \n \"Accept-Encoding\": \"gzip, deflate, sdch, br\", \n \"Accept-Language\": \"tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4\", \n \"Connect-Time\": \"0\", \n \"Connection\": \"close\", \n \"Host\": \"httpbin.org\", \n \"Origin\": \"http://localhost:3000\", \n \"Referer\": \"http://localhost:3000/navigation\", \n \"Total-Route-Time\": \"0\", \n \"User-Agent\": \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\", \n \"Via\": \"1.1 vegur\", \n \"X-Request-Id\": \"db6c93bd-99dd-4410-a709-5bc2dd4150fb\"\n }, \n \"origin\": \"212.175.18.38\", \n \"url\": \"https://httpbin.org/get\"\n}\n","status":200,"ok":true,"statusText":"OK","headers":{"Content-Type":["application/json"]},"type":2,"url":"https://httpbin.org/get"} 
+0

你爲什麼不使用'的console.log(this.tradeShows.status);' –

+0

我之前嘗試過,但它告訴我undefined sachilla。 – user2307786

+1

你需要'JSON.parse(response)'.i.e。 '數據'在你的情況下 –

回答

1

只是這樣做:

this.tradeShows = data.json();

你從一個HTTP調用回來時,你訂閱的對象是Response對象,它具有對HTTP的所有方面的信息調用包括標題,正文等.json()方法自動獲取正文字段並將其轉換爲可以使用的對象。

順便說一下,JSON.stringify()接受一個對象並將其轉換爲一個字符串。如果你打算做手動JSON解析,你需要使用JSON.parse()

如果你想要得到的HTTP狀態代碼發送回您可以訪問的響應的狀態屬性:data.status

+0

他也希望根據我所瞭解的http狀態。 – n00dl3

+0

謝謝Jesse.As你告訴我data.json()。userId解決了我的問題。乾杯 – user2307786

+0

np,我很高興它有幫助 –

-1

在使用打字稿你需要映射值和訂閱它的組件頁面例如

服務調用API

import { Http, Response, Headers, RequestOptions, URLSearchParams } from "@angular/http"; 
constructor(
     private authHttp: Http) {} 
let url= `this.webServiceUrlGet`; 
     let params = new URLSearchParams; 
     params.append('id', id); 
    return this.authHttp.post(url, { headers:headers, search:params }) 
    .map(res => res.json()); 

組件

this.service.get(this.id) 
       .subscribe(
       res => this.item= res, 
       error => this.errorMessage = error 
       ); 
+0

這與打字稿無關,但與角色「Http」服務無關。爲什麼用反引號包圍'this.webServiceUrlGet'?爲什麼不使用OP代碼作爲基礎(即:'Http'而不是'authHttp'服務)? – n00dl3

+0

這是我從httpshttp –

+0

分配的'authHttp'對象Hello Venkateswaran我需要typeScript bro – user2307786

1

如果你想要得到的狀態的JSON,你可以這樣做:

this.http.get(this.webServiceUrlGet) 
    .map(resp=>[resp.status,resp.json()]) 
    .subscribe(([status,data]) => { 
     this.tradeShows = data; 
     this.status = status; 
     console.log(this.tradeShows,this.status); 
    }, 
    error => this.errorMessage = <any>error); 

需要調用resp.json()因爲什麼是由HTTP服務發送的一個Response object

+1

爲什麼你會將結果串聯起來? –

+0

這是來自OP的人工製品,我刪除了 – n00dl3

相關問題