Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Things on this page are fragmentary and immature notes/thoughts of the author. Please read with your own judgement!

SnakeYAML

moultingyaml: Scala wrapper for SnakeYAML

Comment

If the input YAML doc has multiple formats, you can first load it as an Object and then use Object.isInstanceOf to check its type and use Object.asInstanceOf[SomeType] to cast it to the right type.

%%classpath add mvn
org.yaml snakeyaml 1.25
Loading...
Loading...
import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
import org.yaml.snakeyaml.Yaml
import org.yaml.snakeyaml.Yaml
import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
val yaml = new Yaml()
Yaml:1842984473
val document = "\n- Hesperiidae\n- Papilionidae\n- Apatelodidae\n- Epiplemidae"
- Hesperiidae - Papilionidae - Apatelodidae - Epiplemidae
val obj = yaml.load(document).asInstanceOf[java.lang.Object]
[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
obj.isInstanceOf[java.util.List[String]]
true
obj.isInstanceOf[Seq[String]]
false
obj.asInstanceOf[java.util.List[String]]
[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
obj.asInstanceOf[java.util.List[String]]
[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
obj.asInstanceOf[Seq[String]]
java.lang.ClassCastException: java.util.ArrayList cannot be cast to scala.collection.Seq
  ... 48 elided
val list = yaml.load(document).asInstanceOf[java.util.List[String]]
[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
list
[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
val doc = """
    |aa:
    |  - x
    |  - y
    |bb: z
""".stripMargin
aa: - x - y bb: z
yaml.load(doc).asInstanceOf[java.util.Map[String, Any]]
Loading...

Read YAML From a File

The following way of reading from a file is problematic ...

import java.io.{File, FileInputStream}
import org.yaml.snakeyaml.Yaml

val inputStream = new FileInputStream(new File("test.yaml"))
val yaml = new Yaml()
Yaml:923704732
yaml.load(inputStream).asInstanceOf[java.util.Map[String, Any]]
Loading...

Cast to Map

104.62 / 8
13.0775