The Data Jackson mengikat dokumentasi menunjukkan bahwa Jackson mendukung deserialising "Array dari semua jenis didukung" tapi saya tidak tahu sintaks yang tepat untuk ini.
Untuk satu objek saya akan melakukan ini:
//json input
{
"id" : "junk",
"stuff" : "things"
}
//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
Sekarang untuk sebuah array saya ingin melakukan ini:
//json input
[{
"id" : "junk",
"stuff" : "things"
},
{
"id" : "spam",
"stuff" : "eggs"
}]
//Java
List<MyClass> entries = ?
Adakah yang tahu jika ada perintah sihir yang hilang? Jika tidak maka apa solusinya?
Jawaban:
Pertama-tama buat mapper:
Sebagai array:
Sebagai daftar:
Cara lain untuk menentukan jenis Daftar:
sumber
JsonMappingException: No suitable constructor found for type
itu berarti Anda perlu menambahkan konstruktor default ke kelas Anda menambahkan konstruktor no-arg pribadi memperbaikinya untuk saya.static
- jika tidak, mereka tidak akan memiliki konstruktor zero-arg.List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
bekerja hingga 10 kali lebih cepat dari TypeRefence.Dari Eugene Tskhovrebov
Solusi ini tampaknya menjadi yang terbaik untuk saya
sumber
ResourceNotFoundException
Arrays.asList(Json.fromJson(json.get("fieldName"), MyClass[].class))
List<MyClass> myObjects = Arrays.asList(mapper.treeToValue(jsonNode.get("fieldName"), MyClass[].class))
Untuk Implementasi Generik:
sumber
Pertama buat instance dari ObjectReader yang aman-utas.
Kemudian gunakan:
sumber
sumber
di sini adalah utilitas yang dapat mengubah json2object atau Object2json, apa pun pojo Anda (entitas T)
sumber
Anda juga bisa membuat kelas yang meluas
ArrayList
:public static class MyList extends ArrayList<Myclass> {}
dan kemudian gunakan seperti:
sumber
Saya tidak dapat menggunakan jawaban ini karena linter saya tidak akan mengizinkan gips yang tidak dicentang.
Inilah alternatif yang bisa Anda gunakan. Saya merasa ini sebenarnya solusi yang lebih bersih.
sumber