Is it possible to parse with snakeyaml the following content and obtain a List<Radio> (where Radio is the appropriate 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(...); returns a List<HashMap>, but I’d like to get a List<Radio> instead.
Advertisement
Answer
The only way I know is to use a top object to handle the collection.
Yaml file :
--- stations: - id: chaine416 name: "France Inter" type: music - id: chaine417 name: "France Culture" type: music - id: chaine418 name: "Couleur 3" type: music
I just added “—” , new document and an attribute stations.
Then :
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;
}
}
The class 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 + ''' +
'}';
}
}
And to read the YAML file :
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();
}
}
}