2016-06-23 47 views
0

我在下面試圖訪問JSON。在不使用eval的情況下在Javascript中訪問嵌套的JSON元素

{  
"orders": { 
    "errorData": { 
    "errors": { 
     "error": [ 
     { 
      "code": "ERROR_01", 
      "description": "API service is down" 
     } 
     ] 
    } 
    }, 
    "status": "fail" 
} 
} 

我希望能夠以聲明常量來引用JSON由於該結構可以改變,我不希望被重新分解訪問所有的地方。說,我想訪問「狀態」鍵,並使用我的常量。數據引用JSON對象。我可以嘗試(這是打字稿):

public static STATUS : string = "data["orders"]["status"]"; 
var status_value = STATUS; 

的問題是,這僅僅是分配字符串狀態變量「STATUS_VALUE」,實際上沒有計算它。我可以在STATUS上調用eval,但是我想避免這種情況。我知道有一個循環的答案,但它似乎有點過度殺人,因爲我將遍及所有代碼訪問它。 (這是一個角2應用程序,所以很多後端調用和解析JSON)

我可以寫循環函數作爲常量並調用它?任何建議都會很棒,因爲我是Javascript的新手。

+0

爲什麼不只是'data ['order'] ['status']'?我不明白你的用例。也許你有合法的理由,但我不明白。爲什麼它需要是一個字符串,爲什麼你必須評估字符串?你爲什麼不能通過你想要的對象/值? – BotNet

+0

我想將訪問放在一個地方,並不知道通過的對象。由於存在不同的服務和組件,因此多個打印文件需要訪問。答案是一個文件導出一個類,我可以導入到其他類的靜態方法。 –

回答

1

如果不改變,一旦加載的狀態可以那麼data.orders.status值分配給一個變量,只需使用整個代碼變量。

public static STATUS : string = data.orders.status; 

(或任何typescript語法)。

如果可以在頁面後變裝則狀態使用的功能,並調用該函數在整個代碼:

function getStatus() { return data.orders.status; } 

無論哪種方式才能到status領域所需要的對象結構的細節只在代碼中的一個地方描述。

+0

這個簡短的函數語法正是我所期待的,謝謝! –

-1

但我有另一個想法,爲什麼不把鍵保存在列表中,並通過按順序獲取這些鍵的值來計算值。我不知道TypeScript,所以我用Javascript寫了我的答案,你會明白的。

public static STATUS : string = ["orders", "status"]; 
var status_value = angular.copy(data); 
STATUS.forEach(function(key){ 
    status_value = status_value[key]; 
}); 
+0

@Barton Durbin如果你不想使用'eval'並且也不想改變solvig這個問題的方式,那你爲什麼要在這裏發帖 –

相關問題