这可能是重复的问题,因为我不确定我要搜索什么来获得解决方案
我每天都在研究字符串的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
我不确定为什么我得到这个未定义或我错过了分数
答案 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"]);
}
}