用于字符串类的Gson自定义反序列化器

问题描述 投票:0回答:2

我正在使用GSON将json转换为POJO,但是json中的键值可能包含空格,我想对其进行修剪。为此,我编写了一个自定义的字符串反序列化器,但是没有用。这是我想要的:

public class Foo {
  public int intValue;
  public String stringValue;

  @Override
  public String toString() {
      return "**" + stringValue + "**" ;
  }
}

public void testgson()
{
    String json = "{\"intValue\":1,\"stringValue\":\" one two  \"}";
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(String.class, new StringDeserializer());
    Gson gson = gsonBuilder.create();
    Foo a = gson.fromJson(json, Foo.class);
    System.out.println(a.toString()); //prints ** one two ** instead of **one two**

}

class StringDeserializer implements JsonDeserializer<String>
{
    @Override public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException
    {
        String a = json.toString().trim();
        System.out.print(a); //prints ** one two **
        return a;
    }
}

我希望输出为**one two**,但事实并非如此。我做错了

java json gson json-deserialization
2个回答
0
投票

在您的StringDeserializer中,此

json.toString()

正在toString上调用JsonElement,特别是JsonPrimitive包含文本值。 Its toString implementation返回其内容的JSON表示形式,即字符串toString" one two "不会执行您想要的操作,因为该字符串包含在trim中。

您真正想做的是阅读JSON元素的内容。您可以使用"的一种便捷方法来做到这一点:JsonElement

所以

getAsString()

然后将打印您期望的内容。


-1
投票

您可以编写自己的修剪函数,如下所示:

String a = json.getAsString().trim();
© www.soinside.com 2019 - 2024. All rights reserved.