2016-08-01 58 views
0

不知道這是否按預期工作,但我想將一個json blob轉換爲一個通用對象數組(對象是可延展的,可以根據我的URL而改變)。我應該使用JSON.parse(res.json()。data)嗎?謝謝。什麼是在角2打字稿中將JSON投射到通用對象[]的最佳方式?

return this.http.get(URL) 
         .toPromise() 
         .then(response => response.json().data as Object[]) 
         .catch(this.handleError); 
      } 
+0

此答案是否有用? http://stackoverflow.com/questions/22875636/how-do-i-cast-a-json-object-to-a-typescript-class – r3m0t

+0

不,我不知道對象將有什麼屬性,所以打字稿類wouldn不適合我的需求。我寧願將它轉換爲一個通用的javascript對象 –

+0

好吧,你可以像做任何[]一樣做一個不安全的轉換,但是如果你在很多地方使用這個函數,那麼值得使用一個真正的類型響應 – r3m0t

回答

0

與解決方案的問題是,Object類型沒有任何成員(比通常的除外),因此任何企圖從您的JSON訪問特定的屬性,如id等則會創建錯誤。

正確的方法是as any[]

return this.http.get(URL) 
         .toPromise() 
         .then(response => response.json().data as any[]) 
         .catch(this.handleError); 
      } 

這將讓你訪問是JSON響應的一切(以及這是不是在JSON響應一切你會在得到一個錯誤。運行)。

將結果轉換爲特定類型會更好,請參閱How do I cast a JSON object to a typescript class

+0

我設置了應用程序的方式,我傳遞了兩個變量來確定從後端獲取哪個對象,然後從那裏填充谷歌圖表。我認爲通用對象對於快速添加圖表和插入信息來說是最簡單的,使用typecript類有很大的好處,可以抵消創建一堆不同的http調用,而不是一個統一的調用? –

+0

那麼,你會得到類型安全;)和在你的編輯器中自動完成。對於大型項目更重要。 – r3m0t

+0

你的來電者知道什麼類型應該是正確的?你可以使這個方法是通用的,比如'getFromServer (URL_params)',然後做T''作爲T []'。然後,這個函數的返回值將是'Promise '。 – r3m0t

相關問題