当前位置: 首页 > 知识库问答 >
问题:

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

魏健柏
2023-03-14
{
    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);

共有1个答案

关玮
2023-03-14

如何创建一个自定义反序列化器,检查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数组。

 类似资料:
  • 我的目标是让这个电话“只是工作”。

  • 我的RESTendpoint返回包含对象字段的响应对象。序列化一切正常,但当我开始为此API编写客户端时,我遇到了反序列化问题。我根据一些关于使用Jackson进行多态序列化的问题/文章制作了这个示例代码。它演示了这个问题。 我的期望(以及我对列表的期望 我现在拥有的Object: 但我需要反序列化除动物列表之外的其他类型的对象。救命啊!

  • 问题内容: 我有以下json 问题在于,价值价值也是 要么 并将其存储在这些 我相信我通过这样做解决了不是数组而是单个对象的问题 现在,当整个事情以字符串形式返回时,我仍然处于困境.... 问题答案: 我们的想法是试图让(从外地 )为第一,如果抛出异常,这将意味着,没有 进入 ,这将意味着是。用同样的方法,我们可以计算出状况时场。 在我的示例代码中,其他操作也可能引发jsonExceptions,

  • 我使用下面的方法(来自spark-java framework的方法)从DB返回的数据如下: 从DB返回的数据: ClasStypeAdapterFactory: 类类型适配器: 这里我使用的是,它从spark-java ResponseTransformer接口实现了

  • 主要内容:示例我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个类。 然后将对象列化后存储在文件中,该文件将具有对象的json表示形式。 示例 在中创建一个名为的Java类文件,参考以下代码 - 执行上面示例代码,得到以下结果 -

  • 问题内容: 我正在尝试使用Gson将涉及多态的对象序列化/反序列化为JSON。 这是我的序列化代码: 结果如下: 序列化大多的作品,除了它缺少继承成员的内容(尤其是和字符串丢失)。这是我的基类: 这是我的继承类(ObixOp)的样子: 我意识到我可以为此使用适配器,但是问题是我正在序列化基类type的集合。从中继承大约25个类。我该如何优雅地进行这项工作? 问题答案: 我认为自定义序列化器/反序列