我为这个https://github.com/daltontf/scala-yaml找到了一个库,但似乎没有多少开发人员使用它,而且它已经过时了.它也可能是这个http://www.lag.net/configgy/如果链接没有死.
我想知道,在Scala中使用YAML最受欢迎或事实上的库是什么?
Gre*_*pff 24
以下是使用Jackson YAML数据绑定的示例.
首先,这是我们的示例文档:
name: test
parameters:
"VERSION": 0.0.1-SNAPSHOT
things:
- colour: green
priority: 128
- colour: red
priority: 64
Run Code Online (Sandbox Code Playgroud)
添加这些依赖项:
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"
)
Run Code Online (Sandbox Code Playgroud)
这是我们最外层的类(Preconditions是类似番石榴的检查,如果所述字段不在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
}
Run Code Online (Sandbox Code Playgroud)
这是内在的对象:
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")
}
Run Code Online (Sandbox Code Playgroud)
最后,这是如何实例化它:
val reader = new FileReader("sample.yaml")
val mapper = new ObjectMapper(new YAMLFactory())
val config: Sample = mapper.readValue(reader, classOf[Sample])
Run Code Online (Sandbox Code Playgroud)
Ami*_*ico 23
SnakeYAML是一个高质量,积极维护的Java YAML解析器/渲染器.你当然可以在Scala中使用它.
如果你真的想要这种方便,HelicalYAML为SnakeYAML提供了Scala包装器,但我无法证明项目的质量或寿命.
我希望看到一个库可以将JSON或YAML(或其他任何 - 可插入的)解析为常见的AST,然后使用类型类构造Scala对象.几个JSON库就是这样工作的(当然也可以使用相同的类型类为对象渲染JSON),但我不知道YAML的这种工具.
Gau*_*mar 22
派对有点晚,但我认为这种方法以最无缝的方式运作.这种方法有:
码:
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.fasterxml.jackson.module.scala.DefaultScalaModule
case class Prop(url: List[String])
// uses Jackson YAML to parsing, relies on SnakeYAML for low level handling
val mapper: ObjectMapper = new ObjectMapper(new YAMLFactory())
// provides all of the Scala goodiness
mapper.registerModule(DefaultScalaModule)
val prop: Prop = mapper.readValue("url: [abc, def]", classOf[Prop])
// prints List(abc, def)
println(prop.url)
Run Code Online (Sandbox Code Playgroud)
我今天遇到了moultingyaml.
MoultingYAML是基于spray-json的SnakeYAML的Scala包装器.
与我共事多年后,我看起来很熟悉spray-json.我认为它可能适合@ sihil需要一个"引人注目"和"成熟"的Scala YAML库.
小智 5
现在我们有circe-yaml https://github.com/circe/circe-yaml
SnakeYAML提供了一个Java API,用于解析YAML并将其结构编组为JVM类。但是,您可能会发现使用circe编组到Scala ADT中的方法更好-使用编译时指定或派生而不是运行时反射。这使您能够将YAML解析为Json,并使用现有(或大约圆圈的)解码器来执行ADT编组。您还可以使用circe的Encoder获取Json,然后使用此库将其打印到YAML。
| 归档时间: |
|
| 查看次数: |
23044 次 |
| 最近记录: |