将复杂的嵌套JSON反序列化为Scala对象

时间:2018-05-15 16:35:09

标签: json scala serialization

Scala 2.12在这里。我正在尝试使用Lift-JSON将一些JSON反序列化为Scala对象,并且无法浏览Lift API。 请注意:我没有与Lift-JSON结婚,任何其他有效的解决方案都将被接受,只要我不必将任何重/核Play依赖项带入我的项目。

这是我正在尝试阅读的JSON文件:

{
  "fizz" : "buzz",
  "foo" : [
    "123",
    "456",
    "789"
  ],
  "bar" : {
    "whistle" : 1,
    "feather" : true
  }
}

这是我的Scala对象层次结构:

case class Bar(whistle : Integer, feather : Boolean)
case class MyConfig(fizz : String, foo : Array[String], bar : Bar)

最后我对代码的最佳尝试是:

def loadConfig(configFilePath : String) : MyConfig = {
  val configJson = Source.fromFile(configFilePath)

  val parsedJson = parse(configJson.mkString)

  MyConfig(???)
}

我需要进行验证,以便在JSON无效的情况下抛出异常。我是如何从parsedJson中提取字段并使用它们为我的MyConfig实例设置值的任何想法?以及如何进行验证?

1 个答案:

答案 0 :(得分:1)

你试过parsedJson.extract[MyConfig]吗?这直接来自this comment文档。如果您还没有,则需要指定对默认格式的隐式引用:

implicit val formats = DefaultFormats