与gson.toJson(集合)的麻烦

时间:2012-05-07 07:42:48

标签: java json collections gson

我遇到Gson将集合更改为Json对象的问题。这是我的代码:

Collection<BomItem> items = bh.getAllItems();
Iterator<BomItem> itemIterator = items.iterator();

Collection<JsonItem> jsonItems = new Vector<JsonItem>();
JsonItem jsonItem = new JsonItem();

while(itemIterator.hasNext()) {
    BomItem item =  itemIterator.next();
    jsonItem.setItemId(item.getItemId());
    jsonItem.setName(item.getDescription());
    jsonItems.add(jsonItem);
}

System.out.println("json size:" + jsonItems.size());
Gson gson = new Gson();

String json = gson.toJson(jsonItems);
System.out.println("Json: " + json);

这是输出:

09:36:13,846 INFO  [STDOUT] json size:402
09:36:13,849 INFO  [STDOUT] Json: [{"itemId":68073,"name":"Automatically inserted"},{"itemId":68073,"name":"Automatically inserted"},{"itemId":68073,"name":"Automatically inserted"},...}

创建了JsonString,但只能使用最新的对象,一遍又一遍。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您没有在循环中重新实例化您的jsonItem,这意味着您正在向可变对象添加相同的引用。因此,值始终是集合的最后一个对象。

在while循环中移动JsonItem jsonItem = new JsonItem();

答案 1 :(得分:1)

while(itemIterator.hasNext()) { 
    BomItem item =  itemIterator.next();

    //declare jsonitem inside the loop
    JsonItem jsonItem = new JsonItem();  
    jsonItem.setItemId(item.getItemId()); 
    jsonItem.setName(item.getDescription()); 
    jsonItems.add(jsonItem); 
}