Итерация ответа JSON не работает

0
$.ajax({
  type: "GET",
  url: "auth/classes/", 
  async: true,
  cache: false,
  success: function(data){
    var json=eval('('+data+ ')');

Ответ, который я получаю, это

{
  "id":"1117",
  "name":"London"
}
{
  "id":"1118",
  "name":"New York
}
{
  "id":"1119",
  "name":"California"
}

Я могу получить доступ к первому массиву, подобному json['id'], json['name']

Как я могу повторить этот ответ?

  • 0
    Это правильный ответ JSON? Я думаю, что это должно быть как [{"id": "1117", "name": "London"}, {"id": "1118", "name": "New York"}, {"id": " 1119" , "имя": "Калифорния"}]
  • 1
    JSON, который вы получаете, недействителен, вы должны сделать дамп как массив ваших городов.
Показать ещё 6 комментариев
Теги:

3 ответа

1

Поэтому давайте сосредоточимся на вашей функции обработки успеха здесь. В частности, переданный ему аргумент data. Если заголовком типа контента в ответе с сервера является application/json, тогда jQuery достаточно умен, чтобы понять это и передать объект javascript в качестве параметра data.

Если вы не знаете, что передает ваш сервер, я рекомендую вам сделать следующее:

success: function(data){
    console.log(data); 
}

а затем осмотреть объект на консоли (я рекомендую Chrome, потому что у него есть отличный отладчик). Если вместо javascript-объекта вы получаете json как текст, тогда правильный способ его разбора:

var dataAsAnObject = JSON.parse(data);
// and accessing parts of the object once parsed, it depends on the object:
// you use [integer] to access arrays:
var thisIsTheThirdElementInAnArray = dataAsAnObject[3];
// you use ['string'] to access values by key in an associative array:
var thisIsTheValueOfKeyHello = dataAsAnObject['Hello'];

В вашем случае это не понятно, потому что то, что вы вставили, недействительно json. Но мой совет - просто пройти через отладчик и заглянуть в консоль, чтобы вы могли больше узнать об этом.

0

Если я правильно понял ваш вопрос, нет, вы не можете напрямую фильтровать такой массив json. Вы должны перебирать все json-объекты массива, чтобы искать те, которые соответствуют вашим критериям.

Например, при наличии допустимого массива объектов json, если вы хотите отфильтровать атрибут id и получить первый соответствующий, вы можете выполнить итерацию следующим образом:

function getCityById(data,ID) {
    var found=false, i=0;
    while (!found && i<data.length) {
        if (data[i].id === ID) {
            found=true;
        } else {
            i++;
        }
    }

    if (found) {
        return data[i];
    } else {
        return null;
    }
}

Затем вы можете получить доступ к определенному идентификатору, например:

var city = getCityById(data, 1117);
if (city != null) {
    var name = city.name; // should be "London"
}
0

не знаю, каков настоящий вопрос, и вы, конечно, не получаете ответ, который вы написали. возможно, вы получаете:

[{"id": "1117", "name": "London"}, {"id": "1118", "name": "New York"}, {"id": "1119", "name": "Калифорния"}]

массив? возможно, вы получаете массив как часть объекта? Я предполагаю, что этот странный результат имеет отношение к странному использованию eval (я действительно не понял, что вы пытаетесь сделать с этим - разобрать JSON?)

но поскольку это, вероятно, массив, который вы могли бы перебирать с помощью обычного:

for (var i =0, i < data.length, i++) {
  console.log(data[i].id); //etc.. do something usefull with the data

}

  • 0
    ответ, который я получаю, это .. используется console.log (данные)
  • 0
    {"id": "1117", "name": "London"}, {"id": "1118", "name": "New York"}, {"id": "1119", "name": «Калифорния»}
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню