如何在Java中使用GSON或其他JSON库反序列化列表?
我可以在GAE上的我的servlet中序列化List,但是我无法反序列化它。 我究竟做错了什么?
这是我的课堂视频GAE,这是连载:
package legiontube; import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Video { @PrimaryKey private String id; @Persistent private String titulo; @Persistent private String descricao; @Persistent private Date date; /** * @param id * @param titulo * @param descricao * @param date */ public Video(){}; public Video(String id, String titulo, String descricao, Date date) { //super(); this.id = id; this.titulo = titulo; this.descricao = descricao; this.date = date; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
这是我在我的其他应用程序中的视频,我尝试反序列化:
package classes; import java.util.Date; public class Video { private String id; private String titulo; private String descricao; private Date date; /** * @param id * @param titulo * @param descricao * @param date */ public Video(String id, String titulo, String descricao, Date date) { //super(); this.id = id; this.titulo = titulo; this.descricao = descricao; this.date = date; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
有了Gson,你只需要做一些事情:
List<Video> videos = gson.fromJson(json, new TypeToken<List<Video>>(){}.getType());
您可能还需要在要反序列化的Video
类上提供无参数构造函数。
另一种方法是使用数组作为类型,例如:
Video[] videoArray = gson.fromJson(json, Video[].class);
这样你可以避免Type对象的所有麻烦,如果你确实需要一个列表,你总是可以将数组转换为一个列表,例如:
List<Video> videoList = Arrays.asList(videoArray);
恕我直言,这更可读。
试试这一行
List<Video> videos = Arrays.asList(new Gson().fromJson(json, Video[].class));
参考:
json
可能是JsonElement
, Reader
或String
) 上一篇: How to deserialize a list using GSON or another JSON library in Java?