使用snakeyaml解析bean列表

时间:2016-12-07 10:15:55

标签: java yaml snakeyaml

是否可以使用snakeyaml解析以下内容并获得List<Radio>(其中Radio是适当的java bean)?

-
  id: chaine416
  name: 'France Inter'
  type: music
-
  id: chaine417
  name: 'France Culture'
  type: music
-
  id: chaine418
  name: 'Couleur 3'
  type: music

new Yaml().load(...);会返回List<HashMap>,但我想改为List<Radio>

1 个答案:

答案 0 :(得分:3)

我知道的唯一方法是使用顶级对象来处理集合。

Yaml文件:

---
stations:
-
  id: chaine416
  name: "France Inter"
  type: music
-
  id: chaine417
  name: "France Culture"
  type: music
-
  id: chaine418
  name: "Couleur 3"
  type: music

我刚添加了“---”,新文档和属性电台

然后:

package snakeyaml;

import java.util.ArrayList;

public class Radios {

    ArrayList<RadioStation> stations = new ArrayList<RadioStation>();

    public ArrayList<RadioStation> getStations() {
        return stations;
    }

    public void setStations(ArrayList<RadioStation> stations) {
        this.stations = stations;
    }
}

RadioStation课程:

package snakeyaml;


public class RadioStation {
    String id;
    String name;
    String type;


    public RadioStation(){

    }


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }


    @Override
    public String toString() {
        return "RadioStation{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
}

并阅读YAML文件:

package snakeyaml;

import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;

import java.io.FileInputStream;
import java.io.FileNotFoundException;


public class Test {

    public static void main(String[] args) {
        Yaml yaml = new Yaml(new Constructor(Radios.class));
        try {
           Radios  result = (Radios) yaml.load(new FileInputStream("/home/ofe/dev/projets/projets_non_byo/TachesInfoengine/src/snakeyaml/data.yaml"));
            for (RadioStation radioStation : result.getStations()) {
                System.out.println("radioStation = " + radioStation);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}