Aus der Jackson-Datenbindungsdokumentation geht hervor , dass Jackson das Deserialisieren von "Arrays aller unterstützten Typen" unterstützt, aber ich kann die genaue Syntax dafür nicht herausfinden.
Für ein einzelnes Objekt würde ich Folgendes tun:
//json input
{
"id" : "junk",
"stuff" : "things"
}
//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
Nun möchte ich für ein Array Folgendes tun:
//json input
[{
"id" : "junk",
"stuff" : "things"
},
{
"id" : "spam",
"stuff" : "eggs"
}]
//Java
List<MyClass> entries = ?
Weiß jemand, ob ein magischer Befehl fehlt? Wenn nicht, was ist dann die Lösung?
Antworten:
Erstellen Sie zuerst einen Mapper:
Als Array:
Als Liste:
Eine andere Möglichkeit, den Listentyp anzugeben:
quelle
JsonMappingException: No suitable constructor found for type
bedeutet dies, dass Sie Ihrer Klasse einen Standardkonstruktor hinzufügen müssen, indem Sie einen privaten Konstruktor ohne Argumente hinzufügen, der ihn für mich behoben hat.static
- andernfalls haben sie niemals einen Null-Arg-Konstruktor.List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
arbeitet bis zu 10 Mal schneller als TypeRefence.Von Eugene Tskhovrebov
Diese Lösung scheint für mich die beste zu sein
quelle
ResourceNotFoundException
Arrays.asList(Json.fromJson(json.get("fieldName"), MyClass[].class))
List<MyClass> myObjects = Arrays.asList(mapper.treeToValue(jsonNode.get("fieldName"), MyClass[].class))
Für die generische Implementierung:
quelle
Erstellen Sie zunächst eine Instanz von ObjectReader, die threadsicher ist.
Dann benutze es:
quelle
quelle
Hier ist ein Dienstprogramm, mit dem Sie json2object oder Object2json transformieren können, unabhängig von Ihrem Pojo (Entität T).
quelle
Sie können auch eine Klasse erstellen, die Folgendes erweitert
ArrayList
:public static class MyList extends ArrayList<Myclass> {}
und dann benutze es wie:
quelle
Ich konnte diese Antwort nicht verwenden da mein Linter keine ungeprüften Würfe zulässt.
Hier ist eine Alternative, die Sie verwenden können. Ich denke, es ist tatsächlich eine sauberere Lösung.
quelle