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