Как десериализовать строку JSON, содержащую списки объектов внутри других объектов? Я нашел объяснения простой десериализации, но не могу многого из них экстраполировать, так как все они немного ошибочны. Например (POJO опущены), для
String json = "[ {
"id" : 33147,
"name" : "Refinancing",
"photos" : [ {
"name" : "347.png",
"url" : "/loans/568/photos/092"
} ],
"username" : "zach1985"
} , {
"id" : 7693,
"name" : "Stuff",
"photos" : [ {
"name" : "newpic1.png",
"url" : "/loans/123446/photos/890"
} ],
"username" : "sengaia"
} ]";
ArrayList<Ad> ads = new ArrayList<>;
deserialize(json, ads);
System.out.println(ads.get(1).getName());
System.out.println(ads.get(0).getPhotos().get(0).getName());
Выходные данные будут «Stuff» и «347». Как тогда должен быть реализован метод deserialize()?
new ObjectMapper().readValue(data, FullyTypedThing.class)
выполнит свою работу, еслиFullyTypedThing
будет именно тем, что написано на банке: состоит из других полностью типизированных классов или коллекций полностью типизированных классов. Вы даже можете назвать их всеEmbedded
и определить какpublic static
вложенных классов в тех местах, где они будут использоваться. Вам действительно нужен пример или вам удастся определить класс самостоятельно? - person Oleg Sklyar   schedule 02.06.2016ObjectMapper
для преобразования вашего JSON в объекты. @Oleg указал, что вы можете использовать:new ObjectMapper().readValue(data, FullyTypedThing.class)
- если вы хотите прочитать массив, просто передайте массив этого класса тому же методу, что и в:new ObjectMapper().readValue(data, FullyTypedThing[].class
- person CloudNinja   schedule 02.06.2016ObjectMapper
в зависимости от ваших требований (у Джексона есть несколько вариантов). Но я думаю, что просто начните, а затем попробуйте настроитьObjectMapper
, если потребуется, вызвав его методы#configure(..)
и#setVisibility(..)
. - person CloudNinja   schedule 02.06.2016