我正在使用 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**,但事实并非如此。我究竟做错了什么
1 回答
青春有我
TA贡献1784条经验 获得超8个赞
在你的StringDeserializer
,这个
json.toString()
正在调用toString
a JsonElement
,特别是JsonPrimitive
包含文本值的 a 。它的toString
实现返回其内容的 JSON 表示形式,从字面上看就是 String " one two "
。trim
没有执行您想要的操作,因为该 String 包含在"
.
您真正想做的是读取 JSON 元素的内容。您可以使用其中一种JsonElement
方便的方法来做到这一点:getAsString()
。
所以
String a = json.getAsString().trim();
然后会打印你所期望的内容。
添加回答
举报
0/150
提交
取消