Googles cAdvisor API gibt JSON Ausgabe wie folgt:Wie kann ich Jackson verwenden, um JSON mit variablen Objektnamen zu analysieren?
{
/system.slice/docker-13b18253fa70d837e9707a1c28e45a3573e82751f964b66d7c4cbc2256abc266.scope: {},
/system.slice/docker-747f797d19931b4ef33cda0c519f935b592a0b828d16b8cafc350568ab2c1d28.scope: {},
/system.slice/docker-bf947bfabf61cd5168bd599162cf5f5c2ea2350eece1ded018faebf598f7ee5b.scope: {},
/system.slice/docker-e8e02d508400438603151dd462ef036d59fada8239f66be8e64813880b59a77d.scope: {
name: "/system.slice/docker-e8e02d508400438603151dd462ef036d59fada8239f66be8e64813880b59a77d.scope",
aliases: [...],
namespace: "docker",
spec: {...},
stats: [...]
}
}
ich dies als 4 gleiche typisierte JSON-Objekte mit variablen/anonymen Namen beschreiben würde, in einem anonymen Objekt gehalten.
Mein erster Gedanke tun würde, nur so etwas wie mapper.readValue(response, Containers.class)
, wobei gilt:
public class Containers extends BaseJsonObject {
@JsonProperty
public List<Container> containerList;
}
und
public class Container extends BaseJsonObject {
@JsonProperty
private String name;
@JsonProperty
public String[] aliases;
@JsonProperty
private String namespace;
@JsonProperty
private String spec;
@JsonProperty
public Stats[] stats;
}
Aber alle Variationen zu diesem Thema I Ertrag das gleiche Ergebnis denken: eine Permutation von [email protected][containerList=<null>]
oder com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "/system.slice/docker-13b18253fa70d837e9707a1c28e45a3573e82751f964b66d7c4cbc2256abc266.scope" (class com.xyz.Containers), not marked as ignorable (one known property: "containerList"]) at [Source: [email protected]; line: 1, column: 97] (through reference chain: com.xyz.Containers["/system.slice/docker-13b18253fa70d837e9707a1c28e45a3573e82751f964b66d7c4cbc2256abc266.scope"])
, mit ACCEPT_SINGLE_VALUE_AS_ARRAY = false
.
Ich habe versucht:
mapper.readValue(response, Container[].class)
mapper.readValue(response, Containers.class)
mapper.readValues(jsonParser, Container.class)
Neben den folgenden Konfigurationen:
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Wie kann ich analysieren JSON-Objekte mit variablen/anonymen Namen, in einem Nicht-Array gehalten? Wie heißt das?
Ich glaube, Sie dieses JSON analysieren sollten Map –
glw
finde ich die Dokumentation für "rohe" Datenbindung kurz nach dem Posten; das funktioniert. Ich würde immer noch gerne wissen, was ich hier falsch mache. – jordanpg
Ich denke, es ist in diesem JSON Sie haben keine Liste/Array von Objekten. Sie haben Objekte mit Eigenschaften wie "/ system ...." und Werte sind Objekte. – glw