2017-07-03 64 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