无法从JSON对象获取数据

时间:2016-12-15 06:14:17

标签: javascript json ajax

这可能是重复的问题,因为我不确定我要搜索什么来获得解决方案

我每天都在研究字符串的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

我不确定为什么我得到这个未定义或我错过了分数

3 个答案:

答案 0 :(得分:4)

C:\Windows\System32不是数组,它是一个javascript对象。它没有response.data属性,这就是为什么它未定义,并且它也没有length属性。

例如,它具有0属性,因此您可以访问6402902233557646

您可以使用response.data['6402902233557646']._geo_node.name获取对象中所有属性的集合。因此,您也可以访问Object.keys(response.data)。请注意,由于您的对象不是数组,因此项目没有固有的顺序。不要依赖response.data[Object.keys(response.data)[0]]._geo_node.name中的第一项始终是您在对象中定义的第一个元素。如果顺序很重要,请将对象重写为数组。

答案 1 :(得分:1)

无法通过数字作为索引接收非阵列对象。

您可以使用“in”关键字来浏览它。

E.g:

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

答案 2 :(得分:0)

您可能期望一组对象,一种非常常见的JSON数据格式作为输入,其中您可以在for循环中使用.length迭代对象。

您可以使用 Object.keys(data)找到此对象的长度,然后在生成的数组上执行.length。 要进行迭代,您可以使用适当的键使用 hasOwnProperty 方法。

更像是

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