gpt4 book ai didi

java - 如何反序列化作为单个对象或使用 GSON 的对象列表传递的字段?

转载 作者:行者123 更新时间:2023-11-30 05:59:48 25 4
gpt4 key购买 nike

我已成功使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com