如何将具有不同值的相同 JSON 对象反序列化为 java 类
Posted
技术标签:
【中文标题】如何将具有不同值的相同 JSON 对象反序列化为 java 类【英文标题】:How deserialize the same JSON object but with diferent values into a java class 【发布时间】:2019-12-29 06:40:33 【问题描述】:我有以下情况:
有时我会得到这个 JSON 对象
"id": 1, "cp": "male", "money": 10.0, "startDate": "07:00", "endDate": "10:00"
还有这个
"id":1, "cp": "male", "money": 10.0, "startDate": 21600, "endDate": 32400
您可以看到 JSON 具有相同的字段,但有时 startDate 和 endDate 的格式不同 在第二种情况下以秒为单位。
你有简单的java类
public class Person
private Integer id;
private String cp;
private Double money;
@JsonDeserialize(converter = StringToLocalTimeConverter.class)
private LocalTime startDate;
@JsonDeserialize(converter = StringToLocalTimeConverter.class)
private LocalTime startDate;
//Getter-Setter
转换器
public class StringToLocalTimeConverter extends StdConverter<String, LocalTime>
static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;
@Override
public LocalTime convert(String value)
Long number = Long.parseLong(value);
return LocalTime.MIN.plusSeconds(number);
显然我遇到了解析异常,因为由于格式的原因,我无法将两个数据值映射到同一个 LocalTime。
是否可以将两个 JSON 对象 映射到同一个类?我该如何解决这个问题或者我必须创建单独的类 可以应用什么解决方案。
【问题讨论】:
【参考方案1】:好吧,您可以先尝试使用DateTimeFormatter.ISO_LOCAL_TIME
解析它。如果失败,则将其解析为 long :
public class StringToLocalTimeConverter extends StdConverter<String, LocalTime>
static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;
@Override
public LocalTime convert(String value)
try
return LocalTime.parse(value, DATE_FORMATTER);
catch (DateTimeParseException e)
Long number = Long.parseLong(value);
return LocalTime.MIN.plusSeconds(number);
【讨论】:
我会试试这个 工作正常,我有类似的方法,但错过了 try catch()以上是关于如何将具有不同值的相同 JSON 对象反序列化为 java 类的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有嵌套属性的 JSON 对象反序列化为 Symfony 实体?
如何将 JSON 反序列化为具有多个 List<T> 参数的 .NET 对象?
无法将当前 JSON 数组(例如 [1,2,3])反序列化为具有复杂和嵌套对象的类型