2015-10-02 27 views
1

考慮一個複雜的JSON字符串的Java GSON:複雜的反序列化JSON字符串

{ 
    "1": { 
    "name": "1", 
    "CLUSTERS": { 
     "3": { 
     "name": "3", 
     "SUBCLUSTERS": { 
      "6": { 
      "INSTANCES": [ 
       { 
       "SERVER": "4", 
       "ID": "133", 
       "DESCR": "Hi" 
       }, 
       { 
       "SERVER": "5", 
       "ID": "6", 
       "DESCR": "Lo" 
       },    
      "name": "6" 
      } 
     } 
     } 
    } 
    } 
} 

有數百CLUSTERSSUBCLUSTERS。你將如何去解析這樣一個複雜的Java結構。有沒有辦法去反序列化,而不必創建類如public class Cluster3public class Subcluster6

到目前爲止,我有這些類:

Cluster.java

public class Cluster { 

    @SerializedName("SUBCLUSTERS") 
    private Subcluster subCluster; 

    @SerializedName("name") 
    private String name; 
} 

Subcluster.java

public class Subcluster { 

    @SerializedName("INSTANCES") 
    private InstanceArray instanceArray; 
} 

Site.java

public class Site { 

    @SerializedName("CLUSTERS") 
    private Cluster cluster; 

    @SerializedName("name") 
    private String name; 
} 

Instance.java

public class Instance { 

    @SerializedName("SERVER") 
    private String serverName; 

    @SerializedName("ID") 
    private String instanceId; 

    @SerializedName("DESC") 
    private String description; 
} 

InstanceArray.java

public class InstanceArray { 

    @SerializedName("INSTANCES") 
    private List<Instance> instance; 
} 

但我不認爲我佔實際CLUSTERSSUBCLUSTERS對象本身,如36。我怎樣才能做到這一點,而不需要爲每個單獨的CLUSTER和SUBCLUSTER對象創建一個類,因爲這不合理?

回答

0

我認爲你應該做的是創建一個實現com.google.gson.JsonDeserializer的類。還有com.google.gson.JsonSerializer進入另一個方向。

該接口是通用的,因此您可以爲其指定一個代表數據Java存儲的自定義類。然後在該方法中,解析JSON並構建該對象。

這使您可以編寫一個自定義解串器,而無需進行各種Java POJO類。

我最近在我的應用程序中使用了這種方法來反序列化一些棘手的JSON。

本文檔介紹如何編寫自定義解串器:GSON Guide

+0

謝謝您的回答。這可能會花費我很長時間來閱讀所有這些,因爲所有的代碼示例都是用於簡單的字符串,所以我仍然會丟失,但我會給它一個鏡頭。 – UltraSonja