【问题标题】:convert Json object to java object: The logic将 Json 对象转换为 java 对象:逻辑
【发布时间】:2023-03-03 00:29:01
【问题描述】:

我有一个 json 天气 API,每三个小时预测五天。我将部分 json 与两个预测放在一起,因为它太长且重复:

{

    "cod": "200",
    "message": 0.4194,
    "city": {
        "id": 1851632,
        "name": "Shuzenji",
        "coord": {
            "lon": 138.933334,
            "lat": 34.966671
        },
        "country": "JP",
        "population": 0
    },
    "cnt": 40,
    "list": [
        {
            "dt": 1399950000,
            "main": {
                "temp": 287.82,
                "temp_min": 287.82,
                "temp_max": 287.82,
                "pressure": 923.74,
                "sea_level": 1018.93,
                "grnd_level": 923.74,
                "humidity": 100,
                "temp_kf": 0
            },
            "weather": [
                {
                    "id": 501,
                    "main": "Rain",
                    "description": "moderate rain",
                    "icon": "10d"
                }
            ],
            "clouds": {
                "all": 92
            },
            "wind": {
                "speed": 0.51,
                "deg": 226.005
            },
            "rain": {
                "3h": 6
            },
            "sys": {
                "pod": "d"
            },
            "dt_txt": "2014-05-13 03:00:00"
        },
        {
            "dt": 1399960800,
            "main": {
                "temp": 291.36,
                "temp_min": 291.358,
                "temp_max": 291.36,
                "pressure": 921.65,
                "sea_level": 1016.09,
                "grnd_level": 921.65,
                "humidity": 87,
                "temp_kf": 0
            },
            "weather": [
                {
                    "id": 500,
                    "main": "Rain",
                    "description": "light rain",
                    "icon": "10d"
                }
            ],
            "clouds": {
                "all": 20
            },
            "wind": {
                "speed": 0.87,
                "deg": 12.0018
            },
            "rain": {
                "3h": 0.5
            },
            "sys": {
                "pod": "d"
            },
            "dt_txt": "2014-05-13 06:00:00"
        },

我的问题是我不明白制作java对象的逻辑。我使用 jsongen 来生成 java 对象,但它似乎没有给我正确的对象。 通过 jsongen 我的 java 对象类是:

public class Jweather {

        private Number cod;
        private Number message;
        private City city;
        private Number cnt;
        private myList list;
                   ...
                 }

public class City{
    private Coord coord;
    private String country;
    private Number id;
    private String name;
    private Number population;
            ...
           }

public class Coord{
    private Number lat;
    private Number lon;
            ...
           }

public class myList{

    List list = new ArrayList();
    private Number clouds;
    private Number deg;
    private Number dt;
    private Number humidity;
    private Number pressure;
    private Number speed;
    private Temp temp;
    private List weather;
              ...
            }

public class Temp{
    private Number day;
    private Number eve;
    private Number max;
    private Number min;
    private Number morn;
    private Number night;
           ...
         }

public class Weather{
    private City city;
    private Number cnt;
    private String cod;
    private List list;
    private Number message;
            ...
         }

我认为 myList、temp、weather 类是错误的。我写错了吗? 我认为 list.java 应该包含 dt、main、weather、clouds、wind、rain、sys 和 dt_txt 我还需要一个 main.java 类,包括:temp、temp_min、temp_max、pressure、sea_level、grnd_level、湿度和 temp_kf 和一个 cloud.java 类,包括:所有 和风等级包括:速度,度 和雨类包括:3h 和一个 sys 类,包括:pob

任何帮助将不胜感激。

【问题讨论】:

    标签: java json


    【解决方案1】:

    根据您粘贴的 JSON,我同意生成的类看起来不正确。例如,morn 似乎根本没有出现在 JSON 中。您是否粘贴了用于生成类的整个 JSON 内容?

    您使用什么来序列化/反序列化 JSON? Jackson 是一个通用的框架。您需要从将反序列化的 JSON 存储到 POJO bean 的 bean 中定义映射器。

    我自己没有使用过它(我使用 Jackson 并自己创建 JSON 和 POJO bean),但基于 json gen 文档,它似乎是为了生成 JSON-bean 方面的东西。因此,您仍然需要(至少可能)定义您的 POJO bean(除非它们碰巧映射 100%,这似乎不太可能由于各种原因,来自不同的 JSON 属性名称与 POJO 字段名称等)。

    【讨论】:

    • 是的,我粘贴了所有内容,是的,我正在使用 jackson。我编写了一个类来序列化/反序列化以进行测试,但它不起作用并给我异常错误(无法反序列化天气实例。 data.myList out of START_ARRAY token) 我认为这可能是由于我的 java 对象和 json 不匹配
    • 匹配对他们来说绝对是至关重要的。请记住,使用 @JsonProperty 注释在 JSON 本身中的实际属性名称与 JSON bean 中的字段名称之间进行映射的可能性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2012-05-29
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多