Dokumentacja powiązania danych Jacksona wskazuje, że Jackson obsługuje deserializację „Tablic wszystkich obsługiwanych typów”, ale nie mogę ustalić dokładnej składni.
Dla pojedynczego obiektu zrobiłbym to:
//json input
{
"id" : "junk",
"stuff" : "things"
}
//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
Teraz dla tablicy chcę to zrobić:
//json input
[{
"id" : "junk",
"stuff" : "things"
},
{
"id" : "spam",
"stuff" : "eggs"
}]
//Java
List<MyClass> entries = ?
Czy ktoś wie, czy brakuje magicznej komendy? Jeśli nie, to jakie jest rozwiązanie?
Odpowiedzi:
Najpierw utwórz mapera:
As Array:
Jak lista:
Inny sposób określenia typu listy:
źródło
JsonMappingException: No suitable constructor found for type
wtedy, oznacza to, że musisz dodać domyślny konstruktor do swojej klasy, dodając prywatny konstruktor bez argonu, który to naprawił.static
- w przeciwnym razie nigdy nie będą miały konstruktora zero-arg.List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
działa do 10 razy szybciej niż TypeRefence.Od Eugeniusza Cchowrebowa
To rozwiązanie wydaje mi się najlepsze
źródło
ResourceNotFoundException
Arrays.asList(Json.fromJson(json.get("fieldName"), MyClass[].class))
List<MyClass> myObjects = Arrays.asList(mapper.treeToValue(jsonNode.get("fieldName"), MyClass[].class))
Do realizacji ogólnej:
źródło
Najpierw utwórz instancję ObjectReadera, która jest bezpieczna dla wątków.
Następnie użyj go:
źródło
źródło
tutaj jest narzędzie, które jest w stanie przekształcić json2object lub Object2json, bez względu na twoje pojęcie (encja T)
źródło
możesz także stworzyć klasę, która rozszerza
ArrayList
:public static class MyList extends ArrayList<Myclass> {}
a następnie użyj go w następujący sposób:
źródło