从 API 响应中迭代嵌套的 Javascript 对象

Posted

技术标签:

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

我尝试了 100 种不同的方法,并花了几天时间浏览 Google 和 ***,但我找不到解决这个问题的方法。我在此 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 以获取它们的内部值。 【参考方案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);

【讨论】:

谢谢!有人在你前面回答了同样的问题,所以我把那个标记为答案。我得到了我需要的东西,所以谢谢! 很好...:) ..快乐编码

以上是关于从 API 响应中迭代嵌套的 Javascript 对象的主要内容,如果未能解决你的问题,请参考以下文章

获取双嵌套 JSON 响应解析 Javascript API

JavaScript:在另一个 setTimeOut(嵌套 setTimeOut)中的 setTimeOut 以刺激 API 响应不起作用

Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑:(无法从可迭代列表中获取数据)

从Postman中的嵌套响应中检索值

如何从标签 api 响应(javascript)中检索 png

如何在 REACT JS API 调用中迭代 JSON 嵌套数组?