2012-05-07 8 views
0

GsonにコレクションをJsonオブジェクトに変更する際に問題があります。何度も繰り返しますが、唯一の最新のオブジェクトと、gson.toJson(Collection)のトラブル

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が作成されます。これは、出力され

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); 

:これは私のコードです。私は間違って何をしていますか?

答えて

1

ループ内でjsonItemを再インスタンス化する必要はありません。つまり、可変参照オブジェクトに同じ参照を何度も追加しています。したがって、値は常にコレクションの最後のオブジェクトのものです。

whileループ内でJsonItem jsonItem = new JsonItem();を移動します。

+0

うんざりです。それは働いて、ありがとう、私はそれを受け入れるための時間制限が停止するとすぐにそれを受け入れる! – doonot

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); 
}