Search code examples
jsonscalaplay-json

extract case classes from json file scala play


im trying to extract my data from json into a case class without success.

the Json file:

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

my code :

      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)
}

after running this im getting inside r1:

JsError(List((/elements,List(ValidationError(List(error.path.missing),WrappedArray()))), (/name,List(ValidationError(List(error.path.missing),WrappedArray()))), (/location,List(ValidationError(List(error.path.missing),WrappedArray())))))

been trying to extract this data forever, please advise


Solution

  • You have location instead loc and, you'll need to parse file into a Seq[ElementContainer], since it's an array, not a single ElementContainer:

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

    Also, you have the validate method that will return you either errors or parsed json object..