gpt4 book ai didi

java - gson 将特定字段解释为大写

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:02 25 4
gpt4 key购买 nike

我有一个包含一些字段的类,例如

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 字段仍然为空。我怎样才能改变 gson 的行为,以便它将 json Type 对象解释为大写。

我想到的可能的解决方法:

  • 将序数值分配给将匹配 json 中给定内容的枚举类型(即 TEXT("text")
  • 通过分隔符“}”拆分json结果
  • 将所有出现的 -someEnumType- 替换为 -SOMEE​​NUMTYPE-

有点像

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());

然而,这似乎有点 hacky,如果消息包含“}”或其他内容,字符串将被错误地拆分。

最佳答案

最简单的方法是为您的枚举使用@SerializedName 注释。

public Enum Type {
@SerializedName("text")
TEXT,

@SerializedName("picture")
PICTURE
}

@SerializedName 不仅可以用于大写,还可以用于更改枚举或变量的名称,例如

public enum Gender {
@SerializedName("boy")
MALE,

@SerializedName("girl")
FEMALE
}

Reference

另外,正如@Sotirios 所建议的,您需要注释 text 以将 json 键映射到您的变量。

 @SerializedName("data")
private String text;

您现在可以像之前一样使用 Gson 反序列化您的 json

Gson gson = new Gson();
ArrayList<Message> messages = gson.fromJson(jsonResult, new TypeToken<List<Message>>() {}.getType());

希望这有助于...

关于java - gson 将特定字段解释为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com