перебирать список сложных объектов в JSON? - PullRequest
1 голос
/ 10 декабря 2010

Я строю список объектов для добавления в результат JSON:

Person personA = new Person("nameA", "age");
Person personB = new Person("nameB", "age");
Person personC = new Person("nameC", "age");

List<Car> cars = new ArrayList<Car>();

cars.add(new Car("Blue", "Small", personA));
cars.add(new Car("Green", "Big", personB));
cars.add(new Car("Red", "Big", personC));

и в моей карте результатов JSON я поставил:

result.put("cars", cars);

Как перебрать эту коллекцию в JavaScript. Мне нужно иметь доступ к "глубоким" элементам объекта.

$.getJSON(window.actionName,{
            someId: someId}, function (ans){

  //I want something like this
  foreach(car in ans.cars){
      car.person.age
  }
});

РЕДАКТИРОВАТЬ:

result map private Map<String,List<Car>> result = 
        new HashMap<String, List<Car>>();

    result.put("cars", cars);

но похоже, что эти списки не отправляются клиенту. Я получаю эту ошибку в отладчике Chrome:

ReferenceError: value is not defined
... failed to load resource: the server responded with a status of 500 (Internal Server Error)

ОТВЕТ: Ошибка произошла из-за того, что я сериализовал объекты, которые имели аннотации hibernante. Я создал объекты Bean, которые сериализовали их, и теперь сериализация (и итерация работает)

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010
//...

  for(var i = 0, car; car = ans.cars[i]; ++i){
      alert(car.person.age);
  }
1 голос
/ 10 декабря 2010

Существует функциональный стиль:

ans.cars.forEach(function(car) {
  // do something with ‘car’
});

Это стандартный ECMAScript 5. Поскольку вы пометили этот «jquery», вы можете вместо этого попробовать версию jQuery, если не хотите полагатьсяна Array.forEach чтобы быть там:

$.each(ans.cars, function(index, car) {
  // do something with ‘car’
});
...