【问题标题】:iterate over list of complex objects in JSON?迭代JSON中的复杂对象列表?
【发布时间】:2011-05-23 04:40:54
【问题描述】:

我构建了一个对象列表以放入 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)

回答:错误是因为我正在序列化具有休眠注释的对象。我创建了 Bean 对象并将它们序列化,现在序列化(并且迭代正在工作)

【问题讨论】:

  • 该状态码 500 表示您的服务器崩溃并烧毁。与您的javascript无关。检查你的 shell/IDE/终端输出是否有 JAVA 错误。
  • 是的,问题似乎在于地图的序列化。它不能序列化 Map> 但它可以序列化 Map

标签: javascript jquery json iteration


【解决方案1】:

功能风格:

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

这是标准的 ECMAScript 5。由于您已标记此“jquery”,因此如果您不想依赖 Array.forEach,您可能想尝试使用 jQuery 版本:

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

【讨论】:

  • 尝试了所有答案。我编辑了这个问题。当我将简单地图作为 Map 发送时,它正在工作。
【解决方案2】:
//...

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

【讨论】:

  • 尝试了所有答案。我编辑了这个问题。当我将简单地图作为 Map 发送时,它正在工作。
  • @vale4674 我不知道你在服务器上做什么,但错误在于你的服务器代码(可能导致 500 错误)而不是 javascript。我会考虑调查您的序列化机制,也许他们无法序列化哈希图?
  • 但是当我有这个时: private Map result = new HashMap();当我将字符串放入键和值中时,序列化很顺利。但现在不是。收藏有问题吗?
  • 我在设置结果图之前和之后都放了system.out.println(),似乎设置结果时出错了。
猜你喜欢
  • 1970-01-01
  • 2020-05-14
  • 2018-08-19
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多