Here's an example of using the Jackson YAML databinding.
First, here's our sample document:
name: test parameters: "VERSION": 0.0.1-SNAPSHOT things: - colour: green priority: 128 - colour: red priority: 64
Add these dependencies:
libraryDependencies ++= Seq( "com.fasterxml.jackson.core" % "jackson-core" % "2.1.1", "com.fasterxml.jackson.core" % "jackson-annotations" % "2.1.1", "com.fasterxml.jackson.core" % "jackson-databind" % "2.1.1", "com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % "2.1.1" )
Here's our outermost class (Preconditions is a Guava-like check and raises an exception if said field is not in the YAML):
import java.util.{List => JList, Map => JMap} import collection.JavaConversions._ import com.fasterxml.jackson.annotation.JsonProperty class Sample(@JsonProperty("name") _name: String, @JsonProperty("parameters") _parameters: JMap[String, String], @JsonProperty("things") _things: JList[Thing]) { val name = Preconditions.checkNotNull(_name, "name cannot be null") val parameters: Map[String, String] = Preconditions.checkNotNull(_parameters, "parameters cannot be null").toMap val things: List[Thing] = Preconditions.checkNotNull(_things, "things cannot be null").toList }
And here's the inner object:
import com.fasterxml.jackson.annotation.JsonProperty class Thing(@JsonProperty("colour") _colour: String, @JsonProperty("priority") _priority: Int { val colour = Preconditions.checkNotNull(_colour, "colour cannot be null") val priority = Preconditions.checkNotNull(_priority, "priority cannot be null") }
Finally, here's how to instantiate it:
val reader = new FileReader("sample.yaml") val mapper = new ObjectMapper(new YAMLFactory()) val config: Sample = mapper.readValue(reader, classOf[Sample])