2010-12-09 39 views
1

Je construis une liste d'objets à mettre en résultat JSON:parcourir la liste des objets complexes dans 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)); 

et dans mon JSON carte de résultat, je mets:

result.put("cars", cars); 

Comment itérer sur cette collection en JavaScript. J'ai besoin d'avoir accès aux éléments "profonds" de l'objet.

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

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

EDIT:

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

    result.put("cars", cars); 

mais il seemes que cette liste ne sont pas envoyés au client. Je reçois cette erreur dans débogueur Chrome:

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

RÉPONSE: erreur était parce que je sérialisation des objets qui avaient hibernante annotations. J'ai créé des objets Bean qui et les sérialisé et maintenant la sérialisation (et itération travaille)

+0

Ce code d'état 500 signifie que votre serveur est écrasé et brûlé. Rien à voir avec votre javascript. Vérifiez votre sortie shell/IDE/terminal pour les erreurs JAVA. –

+0

Oui, il semble que le prbolem est en sérialisation de la carte. Il ne peut pas sérialiser Map > mais il peut sérialiser Map . – vale4674

Répondre

2
//... 

    for(var i = 0, car; car = ans.cars[i]; ++i){ 
     alert(car.person.age); 
    } 
+0

J'ai essayé toutes les réponses. J'ai édité la question. Quand je envoyais une carte simple comme Map cela fonctionnait. – vale4674

+0

@ vale4674 Je ne sais pas ce que vous faites sur le serveur, mais l'erreur est avec votre code serveur (causant probablement l'erreur 500) et non le javascript. Je considérerais regarder dans vos mécanismes de sérialisation, peut-être ils ne peuvent pas sérialiser un hashmap? –

+0

mais quand j'avais celui-ci: private Map résultat = new HashMap (); et quand je mettais des chaînes dans la clé et la valeur, la sérialisation s'est bien passée. mais maintenant ce n'est pas le cas. Est-ce un problème dans la collection? – vale4674

1

Il y a le style fonctionnel:

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

C'est ECMAScript norme 5. Comme vous avez balisé ce « jquery », vous pouvez essayer la version jQuery à la place si vous ne voulez pas compter sur Array.forEach être là:

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

J'ai essayé toutes les réponses. J'ai édité la question. Quand je envoyais une carte simple comme Map cela fonctionnait. – vale4674