2014-11-05 48 views
1

JSON:如何使用GSON從此JSON製作Java對象?

{"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"} 

我在對象的嘗試:

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; 


    } 

} 
+0

問題是什麼? – JamesB 2014-11-05 22:12:35

+0

那麼,我得到的ID很好,但對於其他的東西,我得到空。 – Stryker 2014-11-05 22:14:26

+0

首先,你錯過了很多領域。如果你想定義一個映射到該JSON的POJO,你需要通過字段來逐個查看,並確保它們都具有。 – azurefrog 2014-11-05 22:14:28

回答

1

這是您的JSON的結構(您可以使用http://jsonviewer.stack.hu看到一個JSON值的結構):

json structure of ops question

現在您應該爲此結構定義POJO。

  1. 你有station陣列,parameters對象,seasonalParameter 字符串,字符串version在您 JSON的第一級forecast陣列。所以你應該定義一個包含這些字段的POJO。
  2. station是一個數組,其中有一個對象,該對象具有id, websiteId,name等字段。所以你應該定義一個POJO爲 有這些字段的站。
  3. parameters是具有ozonepm25temperaturewind_speedwind_dir字段的對象。所以你應該定義一個包含這些字段的POJO。
  4. ozonepm25具有相同的字段,所以它們應該是同一類的 實例。你應該爲他們定義一個POJO。

現在讓我們看看我們的POJO。: 1)你的第一級POJO:

public class Holder { 
    private Station[] station; 
    private Parameters parameters; 
    private String seasonalParameter; 
    private String version; 
    private Object[] forecast; 
} 

2)站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; 
} 

3)POJO的參數場:

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

4)臭氧和pm25油田的POJO:

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

測試:

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); 

注意:您共享 Json的樣品是不是有效的JSON。 「name」:,「latitude」:,「longitude」:,更改爲「name」:「」,「latitude」:「」,「longitude」:「」,以使您的json有效。

+0

非常感謝! – Stryker 2014-11-07 22:23:08