2016-07-14 4 views
0

im пытается извлечь мои данные из json в класс case без успеха.извлечение примеров из json файла scala play

файл 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) 
} 

после запуска этого им получать в Г1:

JsError (Список ((/ элементы, Список (ValidationError (List (error.path.missing), WrappedArray()))), (/ name, List (ValidationError (List (error.path.missing), WrappedArray()))), (/ location, List (ValidationError (List (ERR or.path.missing), WrappedArray())))))

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

+0

Имена элементов в JSON должны соответствовать именам соответствующих переменных в классе case (при использовании форматирования 'Json.format' по умолчанию). Так, например, 'location' следует переименовать в' loc'. – irundaia

+0

проверить это руководство по анализу json для классов case: http://pedrorijo.com/blog/scala-json/ и http://pedrorijo.com/blog/scala-json-part2/ надеюсь, что это поможет понять, как parse json правильно использовать игру. Примечание: https://github.com/travisbrown/circe кажется более мощным и простым в использовании, чем Play JSON – pedrorijo91

+0

thx для ваших ответов, очень информативный и полезный! :) –

ответ

0

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

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

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

+0

Обратите внимание, что вам не хватает [] в вызове 'fromJson'. Это должно быть 'Json.fromJson [Seq [ElementContainer]] (jsonFormat)' – irundaia

+0

@irundaia thx :) –

+0

спасибо вам большое! –