Десериализация сложного вложенного JSON в объекты Scala - PullRequest
0 голосов
/ 15 мая 2018

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 голосов
/ 15 мая 2018

Вы пробовали parsedJson.extract[MyConfig]? Это прямо из документации Извлечение значений . Если вы этого еще не сделали, вам нужно будет указать неявную ссылку на форматы по умолчанию:

implicit val formats = DefaultFormats
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...