仅使用值而不是键值对来解析yaml,

时间:2018-07-21 09:57:33

标签: jackson yaml

我有一个如下的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类可以解决问题,但事实并非如此。

1 个答案:

答案 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的人员列表中。