0
votes

I have tried to create a json object using play.api.libs.json. I got following two compile errors. I tried several ways but I could n`t find any solution for this.

Here is the compile errors

No implicit format for Array[models.Graphs.piechartdata] available.

Read from stdout: implicit val piec = Json.writes[piechart] implicit val piec = Json.writes[piechart] Read from stdout: ^

No Json serializer found for type models.Graphs.piechart. Try to implement an implicit Writes or Format for this type. Read from stdout: println(Json.toJson(p).toString) println(Json.toJson(p).toString) Read from stdout: ^

Here is my Code

package models.Graphs
import play.api.Play.current
import play.api.libs.json._
import scala.language.postfixOps
import scala.collection.mutable.ArrayBuffer

case class piechart(element:String,data:Array[piechartdata]) 
case class piechartdata(label:String,value:Int)

object GraphsModel{

    implicit val piec = Json.writes[piechart]
    implicit val piecdata = Json.writes[piechartdata]

   def createPieChart()={
       var ar = ArrayBuffer[piechartdata]()
           ar += piechartdata("Download Sales",12)
           ar += piechartdata("In-Store Sales",30)

        var arr:Array[piechartdata]=ar.toArray   

       var p=piechart("donut-example",arr)   

       println(Json.toJson(p).toString)

   } 

}

Actually I need to create following json object

{ element: 'donut-example', data: [ {label: "Download Sales", value: 12}, {label: "In-Store Sales", value: 30} ] }

1

1 Answers

0
votes

I solve this, I have add following lines

implicit val implicitpiecdata = new Writes[piechartdata] {
    def writes(q: piechartdata): JsValue = {
      Json.obj(
        "label" -> q.label,
        "value" -> q.value
      )
    }
  }


   implicit val implicitQuoteWrites = new Writes[piechart] {
    def writes(q: piechart): JsValue = {
      Json.obj(
        "element" -> q.element,
        "data" -> q.data
      )
    }
  }

except of

 implicit val piec = Json.writes[piechart]
   implicit val piecdata = Json.writes[piechartdata]