【问题标题】:Troubles with gson.toJson(Collection)gson.toJson(Collection) 的问题
【发布时间】:2012-05-07 07:42:48
【问题描述】:

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

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 被创建,但只使用最新的对象,一遍又一遍。我做错了什么?

【问题讨论】:

    标签: java json collections gson


    【解决方案1】:

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

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

    【讨论】:

    • 这很尴尬。成功了,非常感谢,接受答案的时间一到我就接受!
    【解决方案2】:
    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); 
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多