javascript - 从多个 getJSON 响应返回对象

标签 javascript json

我有一个调用分页 API 的函数,循环访问每个页面并从每个响应返回数据:

function nextPage(url) {
    if (!url) {
        return;
    }
    $.getJSON(url, function(data) {
        nextPage(data.next);
        $.each(data.results, function (k, v) {
            console.log(v.city_name);
        });
    });
}

nextPage('http://url.com/api/v1/cities/?page=1');

目前,当我将响应记录到控制台时,我得到如下所示的内容:

Paris
Brussels
Mexico City
...

但我想要的是一个看起来像这样的结构:

[
  {item: 'Paris'},
  {item: 'Brussels'},
  {item: 'Mexico City'}
]

作为引用,响应数据如下所示:

{
    "count": 105,
    "next": "http://url.com/api/v1/cities/?page=2",
    "previous": null,
    "results": [
        {
            "city_detail": "http://url.com/api/v1/cities/1/",
            "city_name": "Paris"
        },
        {
            "city_detail": "http://url.com/api/v1/cities/2/",
            "city_name": "Brussels"
        },
        {
            "city_detail": "http://url.com/api/v1/cities/3/",
            "city_name": "Mexico City"
        }
    ]
}

我知道答案就在我面前,而且可能很简单,但我缺乏 JavaScript 知识让我失望。希望能帮助解决这个问题。谢谢!

编辑

问题似乎是 nextPage 函数进行了多次调用,从 JSON 的每个页面返回数据。我可以将这些数据放入多个对象中,但不能用一个对象来代表所有响应。

最佳答案

所以基本上你想将键:值对存储到一个对象中......:

点符号:

var cities = {}
function nextPage(url) {
    if (!url) {
        return;
    }
    $.getJSON(url, function(data) {
        nextPage(data.next);
        $.each(data.results, function (k, v) {
            console.log(v.city_name);
            cities.name = v.city_name  //Push to an object
        });
    });
}

所以你会得到这样的回复:

cities = [
  {city: 'Paris'},
  {city: 'Brussels'},
  {city: 'Mexico City'}
]

括号表示法:

var cities = {}
function nextPage(url) {
    if (!url) {
        return;
    }
    $.getJSON(url, function(data) {
        nextPage(data.next);
        $.each(data.results, function (k, v) {
            console.log(v.city_name);
            cities["name"]= v.city_name  //Push to an object
        });
    });
}

结果

: (两者相同)

cities = [
  {city: 'Paris'},
  {city: 'Brussels'},
  {city: 'Mexico City'}
]

编辑

好吧,还有另一个问题!虽然很狡猾,但我们最终还是捕获了它。所以问题就出在这里:

$.getJSON(url, function(data) {
  console.log(data.results)
    nextPage(data.next);
    $.each(data, function (k, v) {
        cities["title"]= v.title  //Push to an object
    });
});

现在,你看到它说 data.results ...实际上 data.results 是一个空的 undefined variable 。你应该做的只是包含整个数据的 data 。您现在可能不明白,但请查看下面我表示的代码...

var dataJSON;
function nextPage(url) {
    if (!url) {
        return;
    }
    $.getJSON(url, function(data) {
      console.log(data) //This consits the data on the below provided url...
        dataJSON = data; // Just making a public variable assigned to the data..
        nextPage(data.next);
        $.each(data, function (k, v) {
        });
    });
}

nextPage('https://cdn.rawgit.com/amanuel2/Collabs/master/list.json')

Plunker 进入控制台查看数据....

编辑2

好吧,这几乎就是我放在 GITHUB 中的 JSON 文件,所以我有一个安全的 HTTPS://.. 无论如何,我在这里刚刚做了 data.results,我得到了这个结果:

enter image description here

这是 Plunker !希望这有帮助!!

编辑3

好吧,现在这是最后一点了.. 对于你的第二个 JSON 页面.. 你的第二个 JSON 页面实际上有语法错误.. 所以我修复了这些错误,将其放入 github 并上传了新的 JSON.. 这是 plunker ..

<强> Link to Read More 关于对象..

关于javascript - 从多个 getJSON 响应返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167181/

相关文章:

javascript - pug-根据变量中是否存在元素执行操作

javascript - 如何在 angular js 的 cookie 中存储登录 session ID?

json -\n 在 flutter 中解析 json 时出错

javascript - PHP - 在数据库中使用一个输入进行搜索

javascript - 在 JavaScript 中显示变量

javascript - JSON.parse 在有效 Json 上失败。已转义控制字符。如果

sql - Entity Framework : One to Many relationship

c# - PowerShell 二进制模块程序集依赖性错误

javascript - 特征检测 : mutation-event availability in JavaScript?

javascript - 如果在 onRowSelection 中使用 setState,则响应 : Material-ui tableRow can not choose,