我有以下JsonArray
个文件
[
{
"DateSent": "06/22/2014 11:09:11",
"UserName": "santosh"
}
]
我将它映射到以下AssistResponse
类
public class AssistResponse {
@SerializedName("DateSent")
private String dateSent;
@SerializedName("UserName")
public String userName;
public void setDateSent(String dateSent) {
this.dateSent = dateSent;
System.out.println(this.dateSent);
}
public String getDateSent() {
return this.dateSent;
}
}
我可以很轻松地获得此类的List or Array
。但我确实希望修改类dateSent
的{{1}}属性,而AssistResponse
映射类。含义Gson
,请解析Gson
文件,然后将值分配给Json
。因此,在分配值时,我需要更改@SerializedName
值。 dateSent
包含dateSent
值,但我想将其更改为server date
。我可以使用local time
然后迭代它并获得parsed List
值,然后更改它。但是,在dateSent
解析Json
期间是否可以更改值,以便最后我不必再次迭代整个Gson
由于
答案 0 :(得分:2)
您需要JsonDeserializer,您可以根据需要从JSON字符串将日期更改为本地日期,并在自定义POJO类中设置值,如下所示。
有关详细信息,请查看GSON Deserialiser Example
我已将其here和here发布在相同的上下文中,可能会帮助您更清楚地了解它。
您可以使用Date
作为dateSent
的数据类型,或者如果您不想更改,请将其保留原样。
示例代码:
class AssistResponse {
@SerializedName("DateSent")
private Date dateSent;
@SerializedName("UserName")
public String userName;
// getter & setter
}
class AssistResponseDeserializer implements JsonDeserializer<AssistResponse> {
@Override
public AssistResponse deserialize(final JsonElement json, final Type typeOfT,
final JsonDeserializationContext context) throws JsonParseException {
JsonArray jsonArray = json.getAsJsonArray();
JsonElement jsonElement = jsonArray.get(0);
JsonObject jsonObject = (JsonObject) jsonElement;
AssistResponse assistResponse = new AssistResponse();
assistResponse.setUserName(jsonObject.get("UserName").getAsString());
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
String dateString = jsonObject.get("DateSent").getAsString();
try {
Date date = dateFormat.parse(dateString);
Date localDate=... // <== here change it to local date
assistResponse.setDateSent(localDate);
} catch (ParseException e) {
e.printStackTrace();
}
return assistResponse;
}
}
AssistResponse data = new GsonBuilder()
.registerTypeAdapter(AssistResponse.class, new AssistResponseDeserializer())
.create().fromJson(jsonString, AssistResponse.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));
答案 1 :(得分:0)
private String dateSent;
dateSent需要是一个字符串吗?你为什么不把它当作日期?
我认为你可以为此编写一个gson反序列化器。 您可以在反序列化器中修改日期并返回修改日期。
JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
Date newDate = //TODO: modifications;
return newDate;
}
};