【问题标题】:$.getJSON returns only one entry$.getJSON 只返回一个条目
【发布时间】:2015-11-11 13:53:00
【问题描述】:

我正在使用 $.getJSON$.each 调用 JSON 端点并检索数据。当我调用数据时,我把它放在一个对象中,然后在控制台中检查它。但是,当我检查控制台时,只有一个条目。

为什么只返回一个条目?我做错了什么?

JSON endpoint

Fiddle

JavaScript:

$(document).ready(function() {
    var url =
        'https://data.montgomerycountymd.gov/resource/housing-code-enforcement.json?street_number=9903';
    var myJson = {};
    $.getJSON(url, function(data) {
        $.each(data, function(i, field) {
            myJson = data;
        });
        console.log(myJson);
    });
});

【问题讨论】:

  • 这是因为您在每次迭代中都覆盖了 myJson 变量。您的 console.log 只会显示数组中的 last 项。在$.each 循环内部处理每个对象。
  • @adin 你到底想用myJson做什么,如果你只是想复制接收到的数据,那么你不需要使用each。接收到的数据是一个数组,你想把它映射到一个对象吗?
  • 您的端点只返回一个对象,而且,看起来您应该从each - jsfiddle.net/5jwotwg7/1 中访问feild,而不是data

标签: javascript jquery json object


【解决方案1】:

见鬼,每个人都在重复自己,以为自己参与了行动。

正如@RoyMcCrosan 所说,您的数据值是一个数组,但是您的myJson 变量是一个对象。您所做的是遍历数组,将该数组中的每个单元格放入myJson 变量中(这是重要的位),覆盖它之前的值。所以你最终只会得到数组中的最后一个值。

现在在不知道您想对数据做什么的情况下,我们无法真正说出您应该做什么,但这里有一些我必须做的常见情况:

如果您想简单地复制数据并使用它作为数组,只需废弃$.each

var myJson = [];
$.getJSON(url, function(data) {
    myJson = data;
    console.log(myJson);
});

如果你想将数据映射为一个数组,但格式不同:

var myJson = [];
$.getJSON(url, function(data) {
    myJson = data.map(function (d) {
      return {}; //Some modified object
    });
    console.log(myJson);
});

如果你想迭代数组并从每个对象中提取一个属性来添加到你myJson变量;

var myJson = {};
$.getJSON(url, function(data) {
    data.forEach(function (d) {
       //Some logic for figuring property name.
       var i = 'FieldName';
       myJson[i] = d[i];
    });
    console.log(myJson);
});

最后,data 是一个使用原生循环方法的数组,例如 .forEachfor 循环。它们会比$.each 更快。从技术上讲,myJson 也不是 JSON,它本身就是一个 JavaScript 对象。

【讨论】:

    【解决方案2】:
    $(document).ready(function() {
        var url =
            'https://data.montgomerycountymd.gov/resource/housing-code-enforcement.json?street_number=9903';
        var myJson = {};
        $.getJSON(url, function(data) {
            $.each(data, function(i, field) {
                myJson = data;
                console.log(myJson);   
         });
    
    });
    

    });

    【讨论】:

    • 啊..该死的。 @Rory McCrosan 打败了我!
    【解决方案3】:

    您需要在每次迭代中移动您的 console.log 语句,但是请注意,您的请求仅返回一个 JSON 文档开始:

        var url =
          'https://data.montgomerycountymd.gov/resource/housing-code-enforcement.json?street_number=9903';
        var myJson = {};
        $.getJSON(url, function(data) {
          $.each(data, function(i, field) {
            myJson = data;
            document.write(JSON.stringify(myJson, undefined, 2)+'<br>')
          });
        });
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      相关资源
      最近更新 更多