0

コレクションを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が作成されますが、最新のオブジェクトのみが何度も作成されます。私は何が間違っているのですか?

4

2 に答える 2

1

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

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

于 2012-05-07T07:46:14.157 に答える
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); 
} 
于 2012-05-07T07:48:15.780 に答える