Ini mungkin tampak sedikit tidak biasa, tetapi saya mencari cara yang efisien untuk mengubah / memetakan JsonNode
menjadi POJO
.
Saya menyimpan beberapa informasi Model saya dalam file json dan saya harus mendukung beberapa versi model saya.
Apa yang saya lakukan adalah memuat file json di memori dalam JsonNode, menerapkan beberapa strategi versi agar cocok dengan versi terbaru dari Model saya.
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
Kecuali jika ada cara yang lebih cepat untuk melakukannya, saya mungkin akan berakhir hanya dengan menerapkannya secara manual JsonNodes
ke Model saya
jsonObjectMapper.readValue(jsonObjectMapper.treeAsTokens(someJsonNode), someTypeReference)
objectMapper.treeToValue(jsonNode, MyClass.class)
p.codec.treeToValue
.Ini harus melakukan trik:
Saya katakan harus karena saya menggunakan itu dengan
String
, bukanBufferedReader
tetapi itu masih harus bekerja.Ini kode saya:
Berikut dokumentasi resmi untuk panggilan itu: http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String, java.lang.Class)
Anda juga dapat menentukan deserializer khusus ketika Anda instantiate
ObjectMapper
: http://wiki.fasterxml.com/JacksonHowToCustomDeserializersSunting: Saya baru ingat sesuatu yang lain. Jika objek Anda yang masuk memiliki lebih banyak properti daripada yang
POJO
dimiliki dan Anda hanya ingin mengabaikan ekstra Anda akan ingin mengatur ini:Atau Anda akan mendapatkan kesalahan karena tidak dapat menemukan properti untuk diatur.
sumber
Jika Anda menggunakan org.codehaus.jackson, ini sudah dimungkinkan sejak 1.6. Anda bisa mengonversi JsonNode menjadi POJO dengan
ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode , java. lang.Kelas)sumber
Jika input JSON Anda memiliki lebih banyak properti daripada POJO Anda dan Anda hanya ingin mengabaikan ekstra di Jackson 2.4, Anda dapat mengonfigurasi ObjectMapper Anda sebagai berikut. Sintaks ini berbeda dari versi Jackson yang lebih lama. (Jika Anda menggunakan sintaks yang salah, itu tidak akan melakukan apa-apa.)
sumber