从 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 编辑:(无法从可迭代列表中获取数据)