将List <item>转换为json

时间:2016-11-15 12:53:10

标签: java json

我有一个像下面这样的列表,

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

该项目是我从SAP获得的结果(&#34; com.vaadin.data.util.sqlcontainer.RowItem&#34;)

我的问题是我需要将该List转换为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:添加了完整的stacktrace /

2 个答案:

答案 0 :(得分:1)

迭代列表中的每个项目并将其添加到JSON对象中。请参阅this answer。

答案 1 :(得分:0)

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