Javascript 无法从JSON对象获取数据

Javascript 无法从JSON对象获取数据,javascript,json,ajax,Javascript,Json,Ajax,这可能是重复的问题,因为我不确定我必须搜索什么才能得到解决方案 我每天都在处理JSON、数组和字符串解析,所以从API中获取值对我来说并不太长,但现在我感到困惑。我从api中得到这个JSON字符串,下面是我整个响应的一些值 { "data": { "6402902233557646": { "_geo_node": { "name": "Dev", "tags": {

这可能是重复的问题,因为我不确定我必须搜索什么才能得到解决方案

我每天都在处理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

我不确定我为什么会得到这个未定义的结果,或者我在哪里错过了点

响应。数据
不是数组,而是javascript对象。它没有
length
属性,所以它没有定义,也没有
0
属性

例如,它确实有一个
6402902233557646
属性,因此您可以访问
response.data['6402902233557646'.\u geo\u node.name


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

response.data
不是数组,而是javascript对象。它没有
length
属性,所以它没有定义,也没有
0
属性

例如,它确实有一个
6402902233557646
属性,因此您可以访问
response.data['6402902233557646'.\u geo\u node.name


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

非数组对象无法通过数字作为索引进行访问

你可以用“in”关键字来完成它

例如:


无法通过数字作为索引访问非.array对象

你可以用“in”关键字来完成它

例如:


您可能需要一个对象数组,一种非常常见的JSON数据格式作为输入,您可以在for循环中使用.length对对象进行迭代

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

更像

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

您可能需要一个对象数组,一种非常常见的JSON数据格式作为输入,您可以在for循环中使用.length对对象进行迭代

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

更像

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

response.data
不是数组。它是一个对象。术语学究:理解这一点对我来说真的很好,我第一次得到了这种类型的api,但接下来我肯定会在这方面做更多的工作。谢谢你的回答。数据不是数组。它是一个对象。术语学究:理解这一点对我来说真的很好,我第一次得到了这种类型的api,但接下来我肯定会在这方面做更多的工作。谢谢。非数组对象不能通过数字作为索引进行访问。-除非它们可以<代码>{0:'a',1:'b',2:'etc.}True,但这仅适用于从0,1,2枚举键的对象子集。。。n-1,n,n为整数“非数组对象不能通过数字作为索引进行访问。”-除非它们可以<代码>{0:'a',1:'b',2:'etc.}True,但这仅适用于从0,1,2枚举键的对象子集。。。n-1,n,n是整数