public Encounter parse(Json.Object object) { final String name = object.getString("name"); final String imageKey = object.getString("image"); Encounter.Builder encounterBuilder = Encounter.with(name).image(imageKey); Json.Array jsonReactions = object.getArray("reactions"); for (int i = 0, limit = jsonReactions.length(); i < limit; i++) { Json.Object jsonReaction = jsonReactions.getObject(i); String reactionName = jsonReaction.getString("name"); Reaction.Builder reactionBuilder = Reaction.create(reactionName); try { Json.Array array = jsonReaction.getArray("stories"); for (int storyIndex = 0; storyIndex < array.length(); storyIndex++) { reactionBuilder.story(parseStory(array.getObject(storyIndex))); } encounterBuilder.reaction(reactionBuilder.build()); } catch (Exception e) { throw new IllegalStateException("Failed to parse encounter " + name, e); } } return encounterBuilder.build(); }