java gson intrepret特定字段大写
我有一个带有一些字段的类,例如
public class Message {
public Enum Type {
TEXT,
PICTURE;
}
private Type type;
private String text;
private int id;
}
假设我有一个json,如下所示
[ { "id" : "1",
"data" : "hello",
"type" : "text",
},
{ "id" : "2",
"data" : "<someImageUrl>",
"type" : "picture",
},
]
我可以通过调用
Gson gson = new Gson();
ArrayList<Message> messages = gson.fromJson(jsonResult, new TypeToken<List<Message>>() {}.getType());
酷。不幸的是,由于json对象和枚举中定义的实例之间的大小写差异,Type字段仍然为null。如何改变gson的行为,使其将json类型的对象解释为大写
我想到的潜在解决方法:
- 为枚举类型分配序数值,使其与json中给出的匹配(即
TEXT("text")
- 按分隔符“}”拆分json结果
- 将所有出现的-someEnumType-替换为-someEnumType-
差不多
public enum Type {
TEXT("text"),
PICTURE("picture");
private final String value
private MessageType(String value) {
this.value = value;
}
public String getValue() {
return value
}
}
...
String[] jsonResultSplit = StringUtils.split(jsonResult, "},")
for (String jsonMessage : jsonResultSplit) {
for (MessageType messageType : MessageType.values()) {
if (jsonMessage.contains("\"type:\" : \"" + messageType.getValue() + "\"")) {
jsonMessage.replace(
"\"type:\" : \"" + messageType.getValue() + "\"",
"\"type:\" : \""
+ StringUtils.capitalize(messageType.getValue() + "\""));
}
}
}
jsonResult = StringUtils.join(jsonResultSplit);
Gson gson = new Gson();
ArrayList<Message> messages = gson.fromJson(jsonResult, new TypeToken<List<Message>>() {}.getType());
然而,这似乎有点黑客行为,如果消息包含“}”或其他内容,字符串将被错误拆分
# 1 楼答案
最简单的方法是对枚举使用@SerializedName注释
@SerializedName
不仅可以用于大写,还可以用于更改枚举或变量的名称,例如Reference
正如@Sotirios所建议的,您需要注释
text
以将json键映射到您的变量现在可以像前面一样使用Gson反序列化json
希望这有帮助
# 2 楼答案
您必须注册自己的^{} 才能进行转换
请注意,还应注释
使用
@SerializedName("data")
,因为它与JSON名称不匹配