2016-09-02 3 views
0

Ich versuche JSON mit der folgenden Struktur mit Gson deserialisieren:Deserialisieren JSON-Objekte mit variabler Struktur, Gson

"FKeyColumn": [{ 
       "ForeignKeyColumns": { 
        "Id": "Id" 
       }, 
       "ReferenceTable": "Expense_Group_Configurations" 
      }], 

"FKeyColumn": [{ 
       "ForeignKeyColumns": { 
        "Vid": "Id" 
       }, 
       "ReferenceTable": "Expense_Group_Configurations" 
      }]  

      ... 

Ich bin nicht sicher, wie meine ForeignKeyColumns Klasse zu strukturieren obwohl, da das Objekt JSON es repräsentiert enthält beliebige Schlüssel-Wert-Paarungen (es gibt keine Satzstruktur neben dem Objekt, das immer ForeignKeyColumns genannt wird). Wie kann ich das mit GSON analysieren?

Antwort

0

Es erforderte einen benutzerdefinierten Deserializer für FKeyColumn Objekte:

public class FKeyColumnDeserializer implements JsonDeserializer<FKeyColumn> { 

      public FKeyColumn deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) 
       throws JsonParseException { 
      final JsonArray jsonFKArray = json.getAsJsonArray(); 
      final FKeyColumn fkc = new FKeyColumn(); 

      for (int i = 0; i < jsonFKArray.size(); i++) { 
       final JsonObject fkObject = (JsonObject) jsonFKArray.get(i); 
       final String ReferenceTable = fkObject.get("ReferenceTable").getAsString(); 
       final JsonObject ForeignKeyColumns = (JsonObject) fkObject.get("ForeignKeyColumns"); 

       Set<Entry<String, JsonElement>> entrySet = ForeignKeyColumns.entrySet(); 
       for(HashMap.Entry<String, JsonElement> entry : entrySet){ 
        fkc.fkRefTableMap.put(entry.getKey(), ReferenceTable); 
       } 
      } 


      return fkc; 
      } 
    } 
Verwandte Themen