2015-11-11 2 views
-2

Я использую $.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); 
    }); 
}); 
+9

Это потому, что вы переписываете переменную 'myJson' на каждой итерации. Ваш 'console.log' будет показывать только * последний элемент * в массиве. Работайте с каждым объектом * внутри * цикла '.each'. –

+0

@adin Что именно вы пытаетесь сделать с помощью 'myJson', если вы просто хотите скопировать полученные данные, тогда вам не нужно использовать' each'. Являются ли полученные данные массивом и вы хотите сопоставить его с объектом? – ste2425

+0

Ваша конечная точка возвращает только один объект, также похоже, что вы должны получать доступ к 'feild', а не' data' из вашего 'each' - http://jsfiddle.net/5jwotwg7/1/ – Und3rTow

ответ

2

ад, видя, как все это повторяя, что мы ищем id в действии.

Как @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 variable;

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 представляет собой массив, используя собственные методы, такие как зацикливание .forEach или for петлю. Они будут быстрее, чем $.each. Также технически myJson не является JSON своим объектом JavaScript в своем собственном праве.

0
$(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); 
    }); 

}); 

});

+0

Ah..dammit. @Rory McCrosan избил меня! –

0

Вы должны переместить 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>') 
 
     }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Смежные вопросы