【问题标题】:Iterate through nested Javascript Objects from API response从 API 响应中迭代嵌套的 Javascript 对象
【发布时间】:2014-11-01 03:48:07
【问题描述】:

我尝试了 100 种不同的方法,并花了几天时间浏览 Google 和 Stackoverflow,但我找不到解决这个问题的方法。我在此 API 响应正文之后调用的所有内容都返回 undefined!

来自 Facebook SDK 的响应如下所示:

[
    {
        "body": "[   
            "data": [
                {
                    "name": "Larry Syid Wright",
                    "administrator": false,
                    "id": "xxx"
                },      {         
                    "name": "Melissa Long Jackson",
                    "administrator": false,
                    "id": "xxx"
                },      {       
                    "name": "Charlotte Masson",
                    "administrator": false,
                    "id": "xxx"  
                }  
            ],   
            "paging": {      
                "next": "url"
            }
        ]"
    },{
        "body": "{   
            "data": [      
                {         
                    "id": "xxx_xxx",       
                    "message": "In honor of Halloween, how many of you have your own ghost stories?  Who believes in ghosts and who doesn't?",                 
                    "type": "status",         
                    "created_time": "2014-10-31T20:02:01+0000",         
                    "updated_time": "2014-11-01T02:52:51+0000",         
                    "likes": {            
                        "data": [               
                            {                  
                                "id": "xxx",                  
                                "name": "Joe HerBatman Owenby Jr." 
                            }          
                        ],            
                    }
                    "paging": {               
                        "cursors": 
                            {                  
                                "after": "xxx",                  
                                "before": "xxx"               
                            }            
                        }         
                    }
                },{         
                    "id": "xxx_xxx",         
                    "from": {            
                        "id": "xxx",            
                        "name": "Jessica Starling"         
                    },       
                    "message": "Watching the "Campaign" and I can't help but notice what a fantastic job they did (Will ferrell and all) with that North Carolina accent! Ya'll know we sound different than other southern states ;)",         
                    "type": "status",           
                    "created_time": "2014-11-01T02:36:21+0000",         
                    "updated_time": "2014-11-01T02:36:21+0000",         
                    "likes": {            
                        "data": [               
                            {                  
                                "id": "xxx",                  
                                "name": "Scott Williams"n               
                            }         
                        ]
                    }      
                }      
            ],   
            "paging": {      
                "previous": "xxx",      
                "next": "xxx"  
            }
        }"
    }
]

此响应来自批处理调用。如果我分别调用它们,我可以轻松地遍历响应,并从中获取所有内容。但是,当我批量调用它们时,我无法通过“body”,我需要使用批量调用。

console.log(response[0].body); 将返回响应第一部分的 body 内的对象,但 console.log(response[0].body.data); 返回 undefined。我只是不明白。这应该很简单,但就像门上有锁而我没有正确的钥匙。

我通常没有问题遍历对象,所以我不需要一个笼统的答案。我需要帮助才能看到这里我看不到的东西。为什么当我在 body 之后调用任何内容时控制台显示 undefined,我需要做什么才能获得这些值?

【问题讨论】:

  • 这些body 值只是巨大的字符串——本质上是嵌入的JSON。您必须将它们单独解析为 JSON 以获取它们的内部值。

标签: javascript arrays object javascript-objects facebook-sdk-4.0


【解决方案1】:

该 JSON 包含嵌套的 JSON。身体似乎是一个字符串。使用

var body = JSON.parse(response[0].body);

【讨论】:

  • 非常感谢!我什至不知道响应会是一个字符串。那有什么意义呢?
  • 看看下面这篇文章,它会完全回答你的问题:benalman.com/news/2010/03/theres-no-such-thing-as-a-json
  • @istos 这绝对解释了事情,而且很有意义。
  • 字符串有点道理,考虑到响应是字符串,你有一个响应数组(想想具有 responseText 属性的 ajax 响应),它们的主体是字符串。这是一个结合了多个端点的调用吗? @istos 我不确定那篇文章在这里如何应用,没有人调用对象 JSON
  • @Juan Mendes,OP 发现它很有帮助,并且文章完全相关,您只需阅读整篇文章而不仅仅是标题。
【解决方案2】:

正文中的值只是字符串。它们作为 json 嵌入。所以首先你需要使用JSON.parse 解析它们。

代码是这样的

var body = JSON.parse(response[0].body);

【讨论】:

  • 谢谢!有人在你前面回答了同样的问题,所以我把那个标记为答案。我得到了我需要的东西,所以谢谢!
  • 很好...:) ..快乐编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多