【问题标题】:how to deserealize JSON without field names如何反序列化没有字段名的 JSON
【发布时间】:2022-01-19 22:15:34
【问题描述】:

我调用了一个返回 JSON 的 REST 服务,我正在尝试对其进行反序列化(将其转换为实体),但问题是它没有匹配的字段名称。 JSON 是这样的:

{
    "text1": "",
    "text2": null,
    "days": [
        {
            "20211217": {
                "07:00": {
                    "id": "1187067",
                    "cupo": 9
                },
                "08:00": {
                    "id": "1187068",
                    "cupo": 10
                }
            }
        },
        {
            "20211219": {
                "07:00": {
                    "id": "1187077",
                    "cupo": 10
                },
                "08:00": {
                    "id": "1187078",
                    "cupo": 10
                }
            
            }
        }
    ]
}

您可以看到它有一些字段,如 text1、text2、days、id 和 cupo,问题是如何映射日期文本 (20211217,20211219) 和小时文本。我该如何操作这些数据?

【问题讨论】:

  • 你的预期输出是什么?
  • 放入地图
  • 你在使用像 Gson 或 Jackson 这样的库吗?
  • 我正在使用杰克逊。也许我没有解释清楚,那些日期和小时字段是随机的。我想把这些数据放在一个实体中,该实体有一个日期字段和一个带有小时、id 和 cupo 的列表
  • 自己动手吧。加载 JSON,遍历原始结果,并将适当的位填充到适当的位置。这样做可能比击败某些框架提交“为你做”要快得多。

标签: java json rest serialization deserialization


【解决方案1】:

您可以按如下方式对 JSON 进行建模:

import java.util.List;
import java.util.Map;

public class YourClass {
    private String text1;
    private String text2;
    private List<Map<String, Map<String, YourOtherClass>>> days;

    public YourClass(String text1, String text2, List<Map<String, Map<String, YourOtherClass>>> days) {
        this.text1 = text1;
        this.text2 = text2;
        this.days = days;
    }

    public String getText1() {
        return text1;
    }

    public void setText1(String text1) {
        this.text1 = text1;
    }

    public String getText2() {
        return text2;
    }

    public void setText2(String text2) {
        this.text2 = text2;
    }

    public List<Map<String, Map<String, YourOtherClass>>> getDays() {
        return days;
    }

    public void setDays(List<Map<String, Map<String, YourOtherClass>>> days) {
        this.days = days;
    }
}

然后将另一个类建模idcupo如下:

public class YourOtherClass {
    private String id;
    private int cupo;

    public YourOtherClass(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getCupo() {
        return cupo;
    }

    public void setCupo(int cupo) {
        this.cupo = cupo;
    }
}

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多