簡體   English   中英

在Java中使用GSON反序列化復雜的Json對象

[英]Deserialize a complex Json Object using GSON in Java

以此為參考,我描述了我的Json數據的結構,並可以根據需要獲取信息,直到我嵌套記錄和數組。 在Java中使用GSON解析復雜的Json對象

但是我的JSON數據嵌套了多次。 例如;

{
  "meetings": [
    {
      "meetingName": "GaryVon",
      "location": "USA",
      "meetingType": "P",
      "meetingDate": "2016-03-25",
      "weatherCondition": "FINE",
      "showCode": {
        "meetingCode": "A",
        "scheduledType": "R"
      },
      "venueType": "ANI",
      "showPools": [
        {
          "showProduct": "GaryVon",
          "showStatus": "Open",

        }
      ]
    }
  ]
}

我有包裝程序和描述json數據格式的類。 每個類在一個新的java文件中。

public class meetingContainer { 
    public List<meetings> meetings;
}

頂級班

public class meetings { 
   private String meetingName;
   private String location;
   private String meetingType;
   private String meetingDate;
   private String weatherCondition;
   private ShowCode showCode;
   private String venueType;
   private ShowPools[] showPools;

   public String getMeetingName() { return meetingName; }
   public String getLocation() { return location; }
   public String getMeetingType() { return meetingType; }
   public String getMeetingDate() { return meetingDate; }
   public String getWeatherCondition() { return weatherCondition; }
   public ShowCode getShowCode() { return showCode; }
   public String getVenueType() { return venueType; }
   public ShowPools[] getShowPools() { return showPools; }
}

二等班

public class ShowCode {
   private String meetingCode;
   private String scheduledType;

   public String getMeetingCode() { return meetingCode; }
   public String getScheduledType() { return scheduledType; }
}

二等班

public class ShowPools {
   private String showProduct;
   private String showStatus;

   public String getShowProduct() { return showProduct; }
   public String getShowStatus() { return showStatus; }
}

然后,我嘗試解析它並獲取可以正常工作的數據,直到進入嵌套數組/記錄為止

Gson g = new Gson();
meetingContainer mc = g.fromJson(jsonMeetingsString, meetingContainer.class);
for(meetings m: mc.meetings){
    System.out.println(m.getMeetingName()); //Result = "GaryVon"
    System.out.println(m.getLocation()); //Result = "USA"
    System.out.println(m.getmeetingType()); //Result = "P"
    System.out.println(m.getShowCode());  //Result = "packagename.ShowCode@210366b4"          
}

我的問題是如何聲明嵌套的數組/記錄,然后從不同的類調用這些方法,即在showcode和showpools中調用這些方法。 其他帖子沒有說如何。 抱歉,這是一個簡單的答案,因為我是Java新手。

m.getShowCode()

這將返回ShowCode類型的引用,以使用getter訪問內部值,例如:

m.getShowCode().getMeetingCode()

您應該為showPools使用列表

private List<ShowPools> showPools;

您提供的JSON字符串無效。 它有一個額外的, -

        {
          "showProduct": "GaryVon",
          "showStatus": "Open",
                              ^

您在注釋中提出的問題的答案: m.getShowCode().getShowProduct()無效,因為showCode節點只有兩個屬性MeetingCodeScheduledType

下面的代碼列出了JSON的所有值。 讓我知道是否不能解決您的問題

    Gson g = new Gson();
    meetingContainer mc = g.fromJson(jsonMeetingsString,
            meetingContainer.class);
    for (meetings m : mc.meetings) {
        System.out.println("meetingName: " + m.getMeetingName()); 
        System.out.println("location: "+ m.getLocation()); 
        System.out.println("meetingType: "+ m.getMeetingType()); 
        System.out.println("meetingDate: "+ m.getMeetingDate()); 
        System.out.println("weatherConditio: "+ m.getWeatherCondition()); 
        System.out.println("showCode->meetingCode: "+ m.getShowCode().getMeetingCode()); 
        System.out.println("showCode->scheduledType: "+ m.getShowCode().getScheduledType());
        System.out.println("venueType: "+ m.getVenueType()); 
        for(ShowPools showPool : m.getShowPools()){
            System.out.println("showPools->showProduct: "+ showPool.getShowProduct());
            System.out.println("showPools->showStatus: "+ showPool.getShowStatus());
        }
    }

輸出:

meetingName: GaryVon
location: USA
meetingType: P
meetingDate: 2016-03-25
weatherConditio: FINE
showCode->meetingCode: A
showCode->scheduledType: R
venueType: ANI
showPools->showProduct: GaryVon
showPools->showStatus: Open

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM