2016-12-15 215 views
0

這可能是重複的問題,因爲我不知道我有什麼搜索每天得到解決無法從JSON獲取數據對象

我工作的JSON,字符串數組和解析,所以我從API獲取價值並不算太長,但現在我很困惑。我正在從我的API這個JSON字符串,下面是我的整個響應

{ 
    "data": { 
     "6402902233557646": { 
      "_geo_node": { 
       "name": "Dev", 
       "tags": { 
        "property_type": ["Dev"], 
        "_listing_type": ["_main"], 
        "others": ["_hotel"] 
       }, 
       "raw_tags": [], 
       "location": { 
        "lat": 22.9745967, 
        "long": 72.5615485 
       }, 
       "_id": "6402902233557646", 
       "type": 120 
      }, 
      "_data_node": { 
       "rating": 0, 
       "img_processed": [], 
       "name": "Dev", 
       "ids": {}, 
       "st": "LIV", 
       "_id": "6402902233557646" 
      } 
     }, 
     "6402902233557647": {}, 
     "6402902233557648": {}, 
     "6402902233557649": {} 
    }, 
    "t": 1144.423, 
    "success": true 
} 

的一些價值觀和我想我已經嘗試下面不同的術語這個

var getData = JSON.parse(response); //Error: Already Parsed 

alert(response.success); //OK true 
alert(response.t); //OK 1144.423 
從此獲得單值

這裏有一個問題

alert(response.data.length) //Undefined 
alert(response.data) // [object,object] 
alert(response.data[0]["_geo_node"]["name"]); //TypeError: response.data[0] is undefined 

我不知道爲什麼我收到這個不確定的或者我錯過了點

+1

'response.data'不是array.its的對象。 –

+0

術語pedantry:[沒有這種東西作爲「JSON對象」。](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) – nnnnnn

+0

它是真的很好,我明白這一點,我第一次有這種類型的API,但接下來我肯定會爲此做更多的工作。這次真是萬分感謝。 –

回答

4

response.data不是數組,它是一個JavaScript對象。它沒有length屬性,所以這就是未定義的原因,也沒有0屬性。

它確實有一個6402902233557646屬性,例如,所以你將能夠訪問response.data['6402902233557646']._geo_node.name

您可以使用Object.keys(response.data)來獲取對象中所有屬性的集合。因此您也可以訪問response.data[Object.keys(response.data)[0]]._geo_node.name。請注意,由於您的對象不是數組,因此這些項目沒有固有的順序。不要依賴Object.keys()中的第一項始終是您在對象中定義的第一個元素。如果順序很重要,請將您的對象重寫爲一個數組。

+0

非常感謝你:) !!! –

1

非數組對象不能通過數字作爲索引進行接受。

您可以通過「in」關鍵字遍歷它。

例如爲:

for (i in data) 
    console.log(i) 
+1

*「非數字對象不能通過數字作爲索引進行加密。」* - 除非可以。 '{0:'a',1:'b',2:'等'}' – nnnnnn

+0

True,但這僅適用於具有從0,1,2 ... n-1枚舉的鍵的對象的子集,n,n是整數 – partizanos

0

你可能期待對象的數組,一個很普通的JSON數據格式輸入,其中你可能會遍歷在使用。長度爲循環對象。

您可以使用Object.keys(data)找到此對象的長度,然後在生成的數組上執行.length。 要進行迭代,您可以使用帶有適當鍵的hasOwnProperty方法。

更多類似

for (var key in data) { 
    if (data.hasOwnProperty(key)) 
    { 
     console.log(data["data"]["whatever key"]); 
    } 
}