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

Gson反序列化JSON时是否可以使用setter?

鲁财
2023-03-14

在使用Gson的fromJson方法时,是否有任何方法可以使用给定类的set方法?

我之所以这样做,是因为对目标类的每个字符串全局变量都进行了修剪。

对此有任何GSON API注释吗?

我知道GSON提供了编写自定义序列化器/反序列化器的能力,但我想知道是否有其他方法可以实现这一点。


共有2个答案

葛胡媚
2023-03-14

我实现了一个JsonDeserializer

下面是我的代码:

import static net.hugonardo.java.commons.text.StringUtils.normalizeSpace;
import static net.hugonardo.java.commons.text.StringUtils.trimToNull;

final class StringGsonTypeAdapter implements JsonDeserializer<String> {

    private static final StringGsonTypeAdapter INSTANCE = new StringGsonTypeAdapter();

    static StringGsonTypeAdapter instance() {
        return INSTANCE;
    }

    @Override
    public String deserialize(JsonElement jsonElement, Type type, 
        JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        return normalizeSpace(trimToNull(jsonElement.getAsString()));
    }
}

...和我的GsonBuilder:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(String.class, StringGsonTypeAdapter.instance())
    .create())
寇宏义
2023-03-14

不,没有。Gson主要通过对实例字段的反射来工作。所以,如果你不打算搬到有这个功能的杰克逊,我想你不能有一个通用的方法来称呼你的二传手。所以没有注释。

但是

为了满足您的特定需求,您可以:

  1. 编写自己的自定义TypeAdapter或
  2. 创建包含要修剪的字符串的构造函数,并创建自定义InstanceCreator或
  3. 将JSON解析为JsonObject,对字符串进行一些处理,然后使用该对象作为源解析到类中

只要您发布一些代码或提供有关您的数据/JSON的信息,我就可以为您提供更多提示。

 类似资料:
  • 问题内容: 使用Gson的方法时,可以使用某种给定类的set 方法吗? 我想这样做是因为对于目标类的每个全局变量都会进行修剪。 为此有任何GSON API注释吗? 我知道GSON提供了编写自定义序列化器/反序列化器的功能,但我想知道是否还有另一种方法可以实现此目的。 问题答案: 我实施了并在上注册了。因此,对于收到的所有String字段,Gson将使用my 反序列化该值。 下面是我的代码: …以及

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 问题内容: 我使用了很多不可变的集合,并且很好奇如何使用Gson反序列化它们。由于没有人回答,而且我自己找到了解决方案,因此我正在简化问题并提出自己的答案。 我有两个问题: 如何为所有人编写一个作品? 如何全部注册? 问题答案: 更新:有https://github.com/acebaggins/gson- serializers ,其中涵盖了许多番石榴集合: 如何编写适用于所有Immutable

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

  • 问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,

  • 我试图使用GSON将一些Json反序列化为一个漂亮整洁的对象。现在,我已经设法让Json正确地映射到一些更明显的变量。然而,在尝试映射一些Json时,我发现: 在我来到之前,它一直映射得很好。我一辈子都想不出如何实现它。我认为主要的问题是它们不再是静态的类名,而是随机化的。因此,写这样的东西是完全不切实际的(也是不可能的): 我环顾了一下Stackoverflow,但答案似乎很复杂,很多答案都不太