如何使用GSON从这个JSON生成Java对象?

如何使用GSON从这个JSON生成Java对象?,java,json,gson,Java,Json,Gson,JSON: 我对对象的尝试: {"station":[{"id":"p2","websiteId":"p2","name":,"label":"Price","latitude":,"longitude":,"zip":"","region":"South"}],"parameters":{"ozone":{"value":"0.044","unit":" ppm","color":"17,250,11","colorHex":"11fa11","arrow":"unchange_gray"},

JSON:

我对对象的尝试:

{"station":[{"id":"p2","websiteId":"p2","name":,"label":"Price","latitude":,"longitude":,"zip":"","region":"South"}],"parameters":{"ozone":{"value":"0.044","unit":" ppm","color":"17,250,11","colorHex":"11fa11","arrow":"unchange_gray"},"pm25":{"value":"NA","unit":"","color":"000000","colorHex":"000000","arrow":""},"temperature":40.4,"wind_speed":4.5,"wind_dir":"SE"},"seasonalParameter":"ozone","forecast":[],"version":"1.5"}
公共类AirObjects{
@序列化名称(“站点”)
公共列表站数据;
公营电台{
@序列化名称(“id”)
公共字符串id;
@SerializedName(“参数”)
公共参数;
}
保护级臭氧
{
@序列化名称(“值”)
公共字符串U值;
@序列化名称(“单位”)
公用臭氧发生器;
@SerializedName(“colorHex”)
公共字符串颜色;
@序列化名称(“箭头”)
公共字符串箭头;
}
受保护类参数
{
@序列化名称(“臭氧”)
公众臭氧;
@序列化名称(“温度”)
公共串温度;
@序列化名称(“风速”)
公共弦风速;
@序列化名称(“wind_dir”)
公共弦风向;
}
受保护类别网站
{
@序列化名称(“id”)
公共字符串id;
@SerializedName(“网站ID”)
公共字符串网站ID;
@序列化名称(“名称”)
公共字符串名称;
@序列化名称(“标签”)
公共字符串标签;
@序列化名称(“纬度”)
公共字符串纬度;
@序列化名称(“经度”)
公共字符串经度;
@序列化名称(“zip”)
公共字符串压缩;
@序列化名称(“区域”)
公共区域;
}
}

这是json的结构(您可以使用它查看json值的结构):

现在,您应该为此结构定义POJO

  • 您有
    数组,
    参数
    对象,
    季节参数
    字符串、
    version
    String和
    forecast
    数组位于 json。因此,您应该定义一个包含这些字段的POJO
  • 是一个数组,它有一个对象,该对象具有
    id
    websiteId
    name
    等字段。因此,您应该为其定义POJO 有这些字段的站点
  • 参数
    是具有
    臭氧
    pm25
    温度
    的对象,
    风速
    风向
    字段。因此,您应该定义一个具有这些字段的POJO
  • ozone
    pm25
    具有相同的字段,因此它们应该是同一类的 实例。您应该为它们定义一个POJO
  • 现在让我们来看看我们的POJO: 1) 您的第一级POJO:

    public class AirObjects {
    
    
        @SerializedName("station")
        public List<Station> stationData;
    
    
    
        public class Station {
    
            @SerializedName("id")
            public String id;
    
            @SerializedName("parameters")
            public Parameters parameters;
        }
    
        protected class Ozone
        {
            @SerializedName("value")
            public String ozone_value;
    
            @SerializedName("unit")
            public String ozone_unit;
    
            @SerializedName("colorHex")
            public String ozone_color;
    
            @SerializedName("arrow")
            public String arrow;
    
    
        }
    
        protected class Parameters
        {
            @SerializedName("ozone")
            public Ozone ozone;
    
            @SerializedName("temperature")
            public String temperature;
    
            @SerializedName("wind_speed")
            public String windSpeed;
    
            @SerializedName("wind_dir")
            public String windDirection;
        }
    
        protected class Sites
        {
            @SerializedName("id")
            public String id;
    
            @SerializedName("websiteId")
            public String websiteId;
    
            @SerializedName("name")
            public String name;
    
            @SerializedName("label")
            public String label;
    
            @SerializedName("latitude")
            public String latitude;
    
            @SerializedName("longitude")
            public String longitude;
    
            @SerializedName("zip")
            public String zip;
    
            @SerializedName("region")
            public String region;
    
    
        }
    
    }
    
    2) 波乔车站:

    public class Holder {
        private Station[] station;
        private Parameters parameters;
        private String seasonalParameter;
        private String version;
        private Object[] forecast;
    }
    
    3) 参数字段的POJO:

    public class Station {
        private String id;
        private String websiteId;
        private String name;
        private String label;
        private String latitude;
        private String longitude;
        private String zip;
        private String region; 
    }
    
    4) 臭氧和pm25领域的POJO:

    public class Parameters {
        private Param ozone;
        private Param pm25;
        private double temperature;
        private double wind_speed;
        private String wind_dir;
    }
    
    测试:

    public class Param {
        private String value;
        private String unit;
        private String color;
        private String colorHex;
        private String arrow;
    }
    

    注意:您共享的Json示例不是有效的Json。“名称”:“纬度”:“经度”:“名称”:“纬度”:“经度”:”更改为“名称”:“经度”:“以使您的json有效。

    有什么问题吗?我得到的id很好,但对于其他内容,我得到的id为空。首先,您缺少很多字段。如果你想定义一个映射到JSON的POJO,你需要一个字段一个字段地检查它,并确保你拥有所有的POJO。
    String json = "{\"station\":[{\"id\":\"p2\",\"websiteId\":\"p2\",\"name\":\"\",\"label\":\"Price\",\"latitude\":\"\",\"longitude\":\"\",\"zip\":\"\",\"region\":\"South\"}],\"parameters\":{\"ozone\":{\"value\":\"0.044\",\"unit\":\" ppm\",\"color\":\"17,250,11\",\"colorHex\":\"11fa11\",\"arrow\":\"unchange_gray\"},\"pm25\":{\"value\":\"NA\",\"unit\":\"\",\"color\":\"000000\",\"colorHex\":\"000000\",\"arrow\":\"\"},\"temperature\":40.4,\"wind_speed\":4.5,\"wind_dir\":\"SE\"},\"seasonalParameter\":\"ozone\",\"forecast\":[],\"version\":\"1.5\"}";
    Gson gson = new Gson();
    Holder item = gson.fromJson(json, Holder.class);