SnakeYaml-使用列表类型的值加载地图

时间:2019-09-23 15:31:26

标签: java yaml snakeyaml

问题

我希望能够将Yaml文件加载到类似于以下内容的结构中:

Map<String, List<CustomType>


示例

这是一个有些人为的例子:

people.yml

people:
  group1:
    - name: Jason
      age: 20
    - name: Mary
      age: 31
  group2:
    - name: Ahmed
      age: 45
    - name: Larry
      age: 5

数据类型:

People.java

class PersonInfo {
    private String name;
    private int age;
    // getters and setters
}

PeopleInfo.java

class PeopleInfo {
    private Map<String, List<PersonInfo>> people;
    // getters and setters
}

TestYaml.java

public class TestYaml {

    public static void main(String[] args) {
        Constructor ctr = new Constructor(PeopleInfo.class);
        TypeDescription td = new TypeDescription(PeopleInfo.class);
        td.putMapPropertyType("people", String.class, List.class);
        ctr.addTypeDescription(td);

        Yaml yaml = new Yaml(ctr);
        InputStream is = ClassLoader.getSystemResourceAsStream("people.yml");
        PeopleInfo peopleInfo = yaml.loadAs(is, PeopleInfo.class);
        System.out.println(peopleInfo);
    }

}

结果

这就是我得到的:

image]([![enter image description here] 1

如您所见,生成的结构实际上是:

Map<String, List<LinkedHashMap<String, String>>>

我想 Map<String, List<PersonInfo>>

我如何使SnakeYaml知道PersonInfo类型,并使其使用它而不是LinkedHashMap

0 个答案:

没有答案