2016-06-23 52 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这个问题的方式,那你为什么要在这里发帖 –

相关问题