Это должно быть выполнимо с помощью специального десериализатора.
Отношения по моему мнению должны быть смоделированы как правильный класс Java с именами. Обратите внимание, что конструктор принимает в качестве аргумента JSONNode
, и я оставил все наши методы получения и установки:
public class Relationship {
private final String id1;
private final String id2;
private final Relation relation;
private final boolean careTaker;
private final boolean liveTogether;
public Relationship(JsonNode base) {
this.id1 = base.get(0).asText();
this.id2 = base.get(2).asText();
this.relation = Relation.valueOf(base.get(1).asText());
this.careTaker = base.get(3).get("careTaker").asBoolean();
this.liveTogether = base.get(3).get("liveTogether").asBoolean();
}
public enum Relation {
PARENT,
SPOUSE;
}
}
Нам также нужен класс, в котором хранится коллекция. Это тот объект, в который вы бы десериализовали объект верхнего уровня (опять же, исключив геттеры и сеттеры):
@JsonDeserialize( using = FamillyRelationshipsDeserializer.class )
public class FamillyRelationships {
public List<Relationship> familyRelationships = new ArrayList<>();
}
Наконец, нам нужно реализовать фактический JsonDeserializer
, указанный в приведенном выше классе. Это должно выглядеть примерно так. Я использовал этот вопрос в качестве ссылки:
class FamillyRelationshipsDeserializer extends JsonDeserializer<FamillyRelationships> {
@Override
public FamillyRelationships deserialize(JsonParser jp, DeserializationContext ctxt) throws
IOException, JsonProcessingException {
FamillyRelationships relationships = new FamillyRelationships();
JsonNode node = jp.readValueAsTree();
JsonNode rels = node.get("familyRelationships");
for (int i = 0; i < rels.size(); i++) {
relationships.familyRelationships.add(new Relationship(rels.get(i));
}
return relationships;
}
}
Надеюсь, это поможет, я на самом деле не проверял ничего из этого, вероятно, он даже не будет компилироваться, но принципы должны быть правильными. Я также предположил, что формат JSON соответствует указанному вами формату. Если это не является гарантией, вам нужно будет выполнить соответствующие проверки и устранить любые отклонения.
Если вы также хотите иметь возможность сериализовать все, тогда вам нужно реализовать JsonSerializer
см. этот вопрос для получения более подробной информации.