Im mit Retrofit gibt die folgende api zuzugreifen:Verwendung Retrofit und Gson mit einer API, die dynamischen Spitzen JSON
https://api.nasa.gov/neo/rest/v1/feed?api_key=DEMO_KEY
Das near_earth_objects
Objekt mehrere Arrays mit jeweils einem Schlüssel enthält ein Datum repräsentiert. Dieser Wert ändert sich offensichtlich, wenn Sie auf ein anderes Datum zugreifen.
Wie üblich habe ich meine POJOs nach der zurückgegebenen JSON-Struktur definiert. Im Folgenden ist meine Haupt Antwort Klasse:
public class AsteroidResponse {
private Links links;
@SerializedName("element_count")
private Integer elementCount;
@SerializedName("near_earth_objects")
private NearEarthObjects nearEarthObjects;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
//getters and setters
}
Die NearEarthObjects
Klasse sieht wie folgt aus:
public class NearEarthObjects {
private List<Observation> observation = new ArrayList<>();
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
//getters and setters
}
ich, bevor sie in dieser Frage laufen habe, und konnte einen Map<String, SomeCustomModel>
verwenden, um es zu bekommen Parst automatisch und setze das Datum als Schlüssel in der Karte. Diese Methode wird in einigen Antworten zu SO vorgeschlagen.
Ich habe versucht, das gleiche in dieser Situation zu tun, die zuvor erwähnte Klasse ersetzen wie folgt aussehen:
public class NearEarthObjects {
private Map<String, Observation> observation = new HashMap<>();
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
}
Leider diesmal, um dieses Verfahren nicht wie erwartet zu funktionieren scheint. Die Karte wird leer zurückgegeben. Was könnte das Problem sein? Was wäre der beste Weg, um meine Modelle so zu strukturieren, dass der zurückgegebene JSON korrekt analysiert wird?
Ja, wie es derzeit strukturiert ist falsch, aber ich besitze nicht die API. In einer der Antworten in dem Link, den du erwähnt hast, haben sie auch versucht, eine 'Map' zu verwenden, obwohl das, wie gesagt, in meinem Szenario nicht zu funktionieren scheint. Ich könnte den JSON manuell parsen, aber ich möchte, dass Gson so viel wie möglich behandelt. –
Orbit
U kann 'JSON' manuell parsen, indem Sie JSON als String definieren und' JSONObject' dazu verwenden. [Link] (http://stackoverflow.com/questions/7304002/how-to-parse-a-dynamic-json-key-in-a-nested-json-result) –