In this case (ok this is old, but for someone it might be of help) you actually have a nested recursive object, so you can just extract the code to deserialize the person on Node and repeat his call newNodes same function
Sort of
public class SocialPersonDeserializer extends JsonDeserializer<Person> {
public Person deserialize(final JsonParser jp, final DeserializationContext ctx) throws IOException {
ObjectCodec codec = jp.getCodec();
JsonNode jsonNode = codec.readTree(jp);
SocialPerson sp = deserializePerson(jsonNode);
JsonNode friends = jsonNode.get("name").asText();
for (JsonNode friendNode : friends) {
sp.getFriends().add(deserializePerson(friendNode));
}
return sp;
}
protected SocialPerson deserializePerson(JsonNode jsonNode){
String name = jsonNode.get("name").asText();
SocialPerson sp = new SocialPerson();
sp.setName(name);
return sp;
}
}