2016-05-05 8 views
4

Wie kann ich mit moshi eine json Struktur analysiert, die Schlüssel, die unbekannt sind bei der Kompilierung hat: dieMoshi - Analysiert unbekannt json Schlüssel

"foo": { 
    "name": "hello", 
    "bar": { 
    "unknownKey1": { 
     "a": "1" 
     } 
    }, 
    "unknownKey2": { 
     "b": "2" 
    }, 
    "unknownKeyX": { 
     "c": "X" 
    } 
    }, 
    "properties": {...} 
} 

Ich habe versucht, mit einem @FromJson Adapter für JSONObject aber die Protokolle nur sagen, dass json ist leer {}

class Foo { 

     @Json(name = "name") 
     String name; 
     @Json(name = "bar") 
     Bar bar; 

     static class Bar { 

     } 
    } 

class BarAdapter { 

    @FromJson 
    Bar fromJson(JSONObject json) { 
     Log.d("xxx", "got " + json.toString()); 
     return new Bar(); 
    } 
} 

(wo ich {"unknownKey1": { ... etc ...} erwarten würde) Wenn ich an der json innerhalb bar bekommen kann, kann ich es manuell durchlaufen, um eine Liste oder etwas hinzufügen (da ich nicht weiß, wie viele Artikel es wird____geben).

es wie folgt aus:

  Moshi moshi = new Moshi.Builder() 
     .add(new BarAdapter()) 
     .add(new LinkedHashMapConverter()) 
     .build(); 

Ich musste auch die LinkedHashMapConverter fügen Sie die moshi Götter zu besänftigen, aber das Hinzufügen Protokolle es werden seine Methoden nie aufgerufen (dies könnte ein anderes Thema mit meinem real json).

irgendwelche Ideen?

Antwort

3

Verwenden Sie eine Karte.

@FromJson 
Bar fromJson(Map<String, Baz> json) { 
    Log.d("xxx", "got " + json.toString()); 
    return new Bar(); 
} 

Wenn Sie auch den Typ der Kartenwerte nicht kennen, können Sie Objekt nicht verwenden.

+0

Sie können Objekt verwenden oder nicht? – ataulm

+0

Objekt ist etwas Besonderes. Je nachdem, was der JSON hat, wird er in eine Map, List, Double, String oder Boolean konvertiert. –