首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从JSON对象获取数据

无法从JSON对象获取数据
EN

Stack Overflow用户
提问于 2016-12-15 06:14:17
回答 3查看 102关注 0票数 0

这可能是重复的问题,因为我不确定我要寻找什么才能得到解决方案。

我每天都在处理JSON、Array和字符串解析,所以从API获取值对我来说并不太长,但现在我感到困惑了。我从api中得到这个JSON字符串,下面是我整个响应的一些值

代码语言:javascript
复制
{
    "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 
}

我试着从这里得到单一的值,就像我已经尝试过用不同的术语来表示

代码语言:javascript
复制
var getData = JSON.parse(response); //Error: Already Parsed

alert(response.success); //OK true
alert(response.t); //OK 1144.423

,这里有一个问题,

代码语言:javascript
复制
alert(response.data.length) //Undefined
alert(response.data) // [object,object]
alert(response.data[0]["_geo_node"]["name"]); //TypeError: response.data[0] is undefined

我不确定我为什么要得到这个未知数,也不知道我在哪里遗漏了要点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-15 06:18:02

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()中的第一项始终是在对象中定义的第一个元素。如果顺序很重要,请将对象重写为数组。

票数 4
EN

Stack Overflow用户

发布于 2016-12-15 06:22:03

不能通过数字作为索引访问Non.array对象。

您可以使用"in“关键字对其进行itterate。

例如:

代码语言:javascript
复制
for (i in data)
  console.log(i)
票数 1
EN

Stack Overflow用户

发布于 2016-12-15 06:45:45

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

您可以用一个Object.keys(data)找到这个对象的长度,然后对结果数组执行一个.length。要迭代,可以使用使用适当键的hasOwnProperty方法。

更像是

代码语言:javascript
复制
for (var key in data) {
  if (data.hasOwnProperty(key)) 
  {
       console.log(data["data"]["whatever key"]);
  }
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41157590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档