如何将具有不同值的相同 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 具有相同的字段,但有时 startDateendDate 的格式不同 在第二种情况下以秒为单位。

你有简单的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.net自定义反序列化为对象

如何将 JSON 反序列化为具有多个 List<T> 参数的 .NET 对象?

无法将当前 JSON 数组(例如 [1,2,3])反序列化为具有复杂和嵌套对象的类型

如何将带有子属性的 JSON 反序列化为 C# 中的 ONE 对象

将 PHP 对象图序列化/反序列化为 JSON