2016-12-06 127 views
0

我不得不解析JSON文件轉換成文本文件,如下面的示例JSON文件,解析多嵌套JSON與GSON

{ 
    "link":"https://xxx.nt", 
    "liveChannels":[ 
         { 
          "name":"Sony TV", 
          "id":1004, 
          "link":"https://xxx.nt", 
          "decryptionTicket":"https://xxxy.nt", 
          "viewLevel":"Too High", 
           "programs": 
            { 
            "totalItems":1, 
            "programs":[ 
                { 
                 "name":"Live or die", 
                 "id":1000000000, 
                 "catchUp":["FUN"], 
                 "startOver":["Again"] 
                } 
               ] 
           } 
        } 
       ] 
} 

我用GSON通過創建下面的Java解析文件類。

  1. 通道
  2. LiveChannel
  3. 程序
  4. 子程序

Channel.java

public class channel 
{ 

    String link = null; 
    ArrayList<liveChannels> liveChannels; 

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

    public ArrayList<liveChannels> getliveChannels() { 
     return liveChannels; 
    } 

    public void setliveChannels(ArrayList<liveChannels> liveChannels) { 
     this.liveChannels = liveChannels; 
    } 

} 

livechannel.java

public class liveChannels { 

    String name = null; 
    int id; 
    String link = null; 
    String decryptionTicket = null; 
    String viewLevel = null; 


    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getId() { 
     return id; 
    } 

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

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

    public String getDecryptionTicket() { 
     return decryptionTicket; 
    } 

    public void setDecryptionTicket(String decryptionTicket) { 
     this.decryptionTicket = decryptionTicket; 
    } 

    public String getViewLevel() { 
     return viewLevel; 
    } 

    public void setViewLevel(String viewLevel) { 
     this.viewLevel = viewLevel; 
    } 

} 

此後如何從程序開始解析邏輯。

「程序」: { 「TOTALITEMS」:1,

program.java

public class programs { 

    ArrayList<sub_programs> sub_programs; 

    int totalItems; 

    public int getTotalItems() { 
     return totalItems; 
    } 

    public void setTotalItems(int totalItems) { 
     this.totalItems = totalItems; 
    } 

    public ArrayList<sub_programs> getProgramsDetails() { 
     return sub_programs; 
    } 

    public void setProgramsDetails(ArrayList<sub_programs> sub_programs) { 
     this.sub_programs = sub_programs; 
    } 

} 

sub_program.java

public class sub_programs { 

    String name = null; 
    int id; 
    String catchUp = null; 
    String startOver = null; 


    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

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

    public String getCatchUp() { 
     return catchUp; 
    } 

    public void setCatchUp(String catchUp) { 
     this.catchUp = catchUp; 
    } 

    public String getStartOver() { 
     return startOver; 
    } 

    public void setStartOver(String startOver) { 
     this.startOver = startOver; 
    } 

} 

和主要的樣子下方,

public static void main(String[] args) throws IOException 
    { 

     Gson gson = new Gson(); 

     String contents = FileUtils.readFileToString(
       new File("C:/sample.json"), "UTF-8"); 

     channel channelHeader = gson.fromJson(contents, channel.class); 

     System.out.println("Channel Information --->"); 

     System.out.println("Channel Link: " + channelHeader.getLink()); 

     ArrayList<liveChannels> liveChannels = channelHeader.getliveChannels(); 

     for (int i = 0; i < liveChannels.size(); i++) { 
      System.out.println("liveChannels Detail --->"); 
      liveChannels liveChannelsDetail = liveChannels.get(i); 
      System.out.println("Channel Name : " + liveChannelsDetail.getName()); 
      System.out.println("Channel ID : " + liveChannelsDetail.getId()); 
      System.out.println("Channel Description Ticket: " + liveChannelsDetail.getDecryptionTicket()); 
      System.out.println("Channel View Level : " + liveChannelsDetail.getViewLevel()); 
     } 

    } 

} 

任何人都可以請求幫助獲取從livechannel類向前解析程序的邏輯。

由於程序不是數組列表,因此程序還不是一個數組列表,還有什麼其他方法可以獲取值。

回答

1

您缺少liveChannels課程中的programs對象。

public class liveChannels { 

    String name = null; 
    int id; 
    String link = null; 
    String decryptionTicket = null; 
    String viewLevel = null; 
    programs programs; 

    public void setPrograms (programs programs) { 
     this.programs = programs; 
    } 

    public programs getPrograms() { 
     return programs; 
    } 

    ... 
} 

,然後在programs類,你需要將sub_programs場重命名爲programs

public class programs { 

    ArrayList<sub_programs> programs; 

    ... 
} 

順便說一句,你的班級命名不遵循Java標準,被認爲是不好的做法。你的類應該被命名爲這樣的:

Channel 
LiveChannel 
Program 
SubProgram 

請注意,這不會影響GSON的解析您的文件的能力作爲GSON更關心比它的字段的實際類名稱的屬性名稱。