2016-11-15 55 views
0

我有像下面的列表,转换列表<Item>到JSON

List<Item> EquipmentData = SAPEquipment.getByFilter(filter); 

这产品我是从SAP(“com.vaadin.data.util.sqlcontainer.RowItem”)

得到结果

我的问题是,我需要将该列表转换为Json格式。我一直在阅读一些例子,使用GSON这样的尝试:

Gson gson = new Gson(); 
gson.toJson(EquipmentData); 

也试图与只有一个项目

gson.toJson(EquipmentData.get(0)); 

报告的错误是以下之一:

java.lang.StackOverflowError 
com.google.gson.stream.JsonWriter.string(JsonWriter.java:559) 
com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402) 
com.google.gson.stream.JsonWriter.beginObject(JsonWriter.java:307) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:214) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208) 
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219) 
com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:899) 

我无法修改该列表,所以我需要一个适当的方式来转换它。

任何提示,将不胜感激

编辑:添加项类链路(vaadin.com/api/com/vaadin/data/Item.html

EDIT2:增加全堆栈跟踪/

+0

显示'Item'类,请 –

+0

您可以在此处看到Item Class:https://vaadin.com/api/com/vaadin/data/Item.html –

+0

当您有Gson认为对象包含时,通常会出现Stackoverflow本身,所以既然我不知道你的Item对象是什么样子,很难说 –

回答

0

0123'的原因可能是因为您的项目类中的递归映射。解决此问题的一种方法是遍历EquipmentData列表并设置返回对象(DTO),然后使用GSON转换DTO

+0

我应该如何存储临时对象?我想我将无法将我的物品投放到对象 –

+0

请发布您的“Item”类 –

+0

这是来自Vaadin的一个RowItem:https://vaadin.com/api/7.7.3 /com/vaadin/data/util/sqlcontainer/RowItem.html –

1

迭代列表中的每个项,并将其添加到JSON对象。请参考this的答案。

+0

请描述附加答案的本质。否则,您的答案将显示在低质量帖子审阅队列中,并可能会被删除。 – xenteros