在不使用eval的情况下访问Javascript中的嵌套JSON元素

时间:2016-06-23 00:04:50

标签: javascript json typescript

我正在尝试访问以下JSON。

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

我希望能够声明常量来引用JSON,因为结构可能会发生变化,而且我不想重新考虑遍及各地的访问。说,我想访问"状态"键和使用我的常数。数据是指JSON对象。我可以尝试(这是在TypeScript中):

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

问题在于,这只是将字符串STATUS分配给变量" status_value",而不是实际评估它。我可以在STATUS上调用eval,但我想避免这种情况。我知道有一个循环答案,但它似乎有点过度杀死,因为我将在整个代码中访问它。 (它是一个Angular 2应用程序,所以很多后端调用和解析JSON)

我可以将循环函数写为常量并调用它吗?任何建议都会很棒,因为我是Javascript的新手。

2 个答案:

答案 0 :(得分:1)

如果状态在加载后无法更改,则将data.orders.status的值分配给变量,并在整个代码中使用该变量。

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

(或任何打字稿语法)。

如果在加载页面后状态可以更改,那么使用一个函数并在整个代码中调用该函数:

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

无论哪种方式,到达status字段所需的对象结构的详细信息仅在代码中的一个位置描述。

答案 1 :(得分:-1)

但我有另一个想法,为什么不将密钥保存在列表中并通过按顺序获取这些键的值来计算值。我不知道TypeScript所以我在Javascript中写答案,你会明白的。

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