2017-07-03 85 views
-1

我正在使用棒球运动API。我有问题,检查是否:检查JSON中是否存在嵌套键

outcome.runners[0] 

outcome.runners[1] 

outcome.runners[2] 

存在与否。我可以检查,看是否做

outcome.hasOwnProperty('runners')===true 

存在选手节点,但必须看到问题,如果第一,第二或第三个亚军有(也有自己的财产是不是我用理想的方法)。这一点很重要,因为如果只有一个亚军是在基地的节点

outcome.runners[1] and outcome.runners[2] 

不会填充,我会检查的东西不存在,并最终得到一个错误。下面是一些精简的JSON,让我知道我在看什么。

{ 
    "outcome": { 
    "-type": "pitch", 
    "-current_inning": "3", 
    "-current_inning_half": "T", 
    "runners": { 
     "runner": [ 
     { 
      "-id": "ca159e78-05a9-410a-be7b-3ebad5496a88", 
      "-last_name": "John", 
     }, 
     { 
      "-id": "3742039b-7c2a-4f75-be72-d4478ed83a58", 
      "-last_name": "Smith", 
     }, 

     ] 
    } 
    } 
} 
+2

如果你还提供你的JS代码,那么我们就可以看到你的尝试:) –

+1

'Array.isArray(outcome.runners .runner)&& outcome.runners.runner.length> 1' – Phil

+0

什么是数据结构看起来像,如果只有一个亚军? – Phil

回答

0

根据您提供的示例JSON,这些都不是真正正确指向您的亚军对象:
outcome.runners[0] outcome.runners[1] outcome.runners[2]

根据你的数据结构中的选手可以通过属性来访问:outcome.runners.runner

因此,要获得亚军#1,你会怎么做:
outcome.runners.runner[0]

在Javascript中,以检查是否在特定索引的元素数组中存在,你可以使用一个简单的if语句:
if (array[index]) { //do stuff here }

你的情况,以检查是否亚军#1存在,你可以这样做:
if (outcome.runners.runner[0]) { //do stuff here }

ps通过在数据结构中拥有'runners'属性的'runner'属性而引入的额外级别的层次结构可以并且应该被消除,因为它会产生不必要的复杂性并且没有意义。

你的数据应该看起来更像是这样的:

{ 
    "outcome": { 
    "-type": "pitch", 
    "-current_inning": "3", 
    "-current_inning_half": "T", 
    "runners": [ 
     { 
      "-id": "ca159e78-05a9-410a-be7b-3ebad5496a88", 
      "-last_name": "John", 
     }, 
     { 
      "-id": "3742039b-7c2a-4f75-be72-d4478ed83a58", 
      "-last_name": "Smith", 
     }, 

    ] 
    } 
} 
+0

感谢你的帮助,我真的很感激! – Nish

+0

非常欢迎您。请接受和upvote,如果它解决了你的问题:) – matetukacs

0

观察: JSON你所提供的不是有效的JSON。

enter image description here

你必须从一个对象的最后一个属性中删除,

有效的JSON:enter image description here

相关解析JSON,为matetukacs建议。根据你的数据结构,你可以通过属性访问你的跑步者:outcome.runners.runner