извлечь классы case из файла json scala play

Я безуспешно пытаюсь извлечь свои данные из json в класс case.

файл Json:

 [
  {
    "name": "bb",
    "loc": "sss",
    "elements": [
      {
        "name": "name1",
        "loc": "firstHere",
        "elements": []
      }
    ]
  },
  {
    "name": "ca",
    "loc": "sss",
    "elements": []
  }
]

мой код:

      case class ElementContainer(name : String, location : String,elements : Seq[ElementContainer])
      object elementsFormatter  {
        implicit val elementFormatter = Json.format[ElementContainer]
      }

    object Applicationss extends App  {

      val el = new ElementContainer("name1", "firstHere", Seq.empty)
      val el1Cont = new ElementContainer("bb","sss", Seq(el))

      val source:String=Source.fromFile("src/bin/elementsTree.json").getLines.mkString
  val jsonFormat = Json.parse(source)
  val r1= Json.fromJson[ElementContainer](jsonFormat)
}

после запуска этого я попадаю внутрь r1:

JsError (List ((/ elements, List (ValidationError (List (error.path.missing), WrappedArray ()))), (/ name, List (ValidationError (List (error.path.missing), WrappedArray ())) ), (/ местоположение, Список (ValidationError (Список (error.path.missing), WrappedArray ())))))

пытался извлечь эти данные навсегда, пожалуйста, сообщите


person Pavel Krivosheev    schedule 14.07.2016    source источник
comment
Имена элементов в JSON должны совпадать с именами соответствующих переменных в классе case (когда вы используете форматировщик Json.format по умолчанию). Так, например, location следует переименовать в loc.   -  person irundaia    schedule 14.07.2016
comment
ознакомьтесь с этим руководством по синтаксическому анализу json в классы case: pedrorijo.com/blog/scala-json и pedrorijo.com/blog/scala-json-part2 надеются, что это поможет понимание того, как правильно разбирать json с помощью play. Примечание. github.com/travisbrown/circe кажется более мощным и простым в использовании, чем Play JSON.   -  person pedrorijo91    schedule 14.07.2016
comment
спасибо за ответы, очень информативно и полезно! :)   -  person Pavel Krivosheev    schedule 16.07.2016


Ответы (1)


У вас location вместо loc, и вам нужно будет разобрать файл на Seq[ElementContainer], поскольку это массив, а не один ElementContainer:

Json.fromJson[Seq[ElementContainer]](jsonFormat)

Кроме того, у вас есть метод validate, который вернет вам либо ошибки, либо проанализированный объект json.

person insan-e    schedule 14.07.2016
comment
Обратите внимание, что вам не хватает [] в вызове fromJson. Должно быть Json.fromJson[Seq[ElementContainer]](jsonFormat) - person irundaia; 14.07.2016
comment
Пожалуйста, не стесняйтесь проголосовать и / или пометить ответ как правильный! :п - person insan-e; 15.07.2016