我正在使用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**
,但事实并非如此。我做错了
在您的StringDeserializer
中,此
json.toString()
正在toString
上调用JsonElement
,特别是JsonPrimitive
包含文本值。 Its toString
implementation返回其内容的JSON表示形式,即字符串toString
。 " one two "
不会执行您想要的操作,因为该字符串包含在trim
中。
您真正想做的是阅读JSON元素的内容。您可以使用"
的一种便捷方法来做到这一点:JsonElement
。
所以
getAsString()
然后将打印您期望的内容。
您可以编写自己的修剪函数,如下所示:
String a = json.getAsString().trim();