作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已成功使用 GSON 将 JSON 转换为单个对象并将 JSON 转换为对象列表。我的问题是有两个来源向我发送数据。一种是只发送一个对象,另一种是发送对象列表。
单个对象来自第一个来源:
{
id : '1',
title: 'sample title',
....
}
来自第二个来源的对象列表:
[
{
id : '1',
title: 'sample title',
....
},
{
id : '2',
title: 'sample title',
....
},
...
]
用于反序列化的类:
public class Post {
private String id;
private String title;
/* getters & setters */
}
以下适用于我的第一个案例:
Post postData = gson.fromJson(jsonObj.toString(), Post.class);
这适用于我的第二个案例:
Post[] postDatas = gson.fromJson(jsonObj.toString(), Post[].class);
有没有办法同时处理这两种情况?或者我应该查看字符串并在它不可用时添加 []谢谢
最佳答案
如何创建一个自定义反序列化器来检查 json 是否是一个数组,如果不是,则创建一个包含单个对象的数组,例如:
public class PostArrayOrSingleDeserializer implements JsonDeserializer<Post[]> {
private static final Gson gson = new Gson();
public Post[] deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext ctx) {
try {
return gson.fromJson(json.getAsJsonArray(), typeOfT);
} catch (Exception e) {
return new Post[] { gson.fromJson(json, Post.class) };
}
}
}
并将其添加到您的 Gson 中:
Post[] postDatas = new GsonBuilder().setPrettyPrinting()
.registerTypeAdapter(Post[].class, new PostArrayOrSingleDeserializer())
.create()
.fromJson(jsonObj.toString(), Post[].class);
因此,您应该始终拥有一个包含一个或多个项目的 Post
数组。
关于java - 如何反序列化作为单个对象或使用 GSON 的对象列表传递的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456821/
我是一名优秀的程序员,十分优秀!