我有一个如下的Yaml文档-
---
Village:
Persons:
-
name: Tom
age: 65
children:
- Bob
- Marla
-
name: Dick
age: 58
它可以很容易地解析。现在为简洁起见,我想制作相同的文档-
---
Village:
Persons:
-
Tom:
age: 65
children:
- Bob
- Marla
-
Dick:
age: 58
请注意,基本上它是相同的数据。像上面的文档一样,如何将其解析为Person
对象?我正在将Java与Jackson解析器配合使用。
很明显,我有 Village 和 Person 类,其中包含所有的getter和setter方法。我以为具有默认构造函数和String参数的Person类可以解决问题,但事实并非如此。
答案 0 :(得分:1)
您将需要一个自定义设置器,用于对Village
类中的Person进行反序列化。您的Village
类将如下所示:
public class Village {
List<Person> persons = new ArrayList<>();
@JsonProperty("Persons")
public void setPersons(Map<String, Person> personMap){
for (Map.Entry<String, Person> entry : personMap.entrySet()) {
entry.getValue().setName(entry.getKey());
persons.add(entry.getValue());
}
public List<Person> getPersons() {
return persons;
}
}
在setPersons
方法中,来自Yaml的Persons被用作键值对。
由于yaml中的键是Person的名称,因此只需迭代地图并使用setName
将名称注入到每个Person
对象中。
之后,将“人员”添加到Village
的人员列表中。