Jorge Ivansevick
Jorge Ivansevick

Reputation: 153

Convert a row-List Cassandra table to a JSON format using scala

I want to convert a Cassandra table into JSON format using scala; this is the code I use to connect to Cassandra and show the table:

val cluster = Cluster.builder().addContactPoint("localhost").build()
val session = cluster.connect("MyKeySpace")
try {

  val a = session.execute("Select* from users") 
  println(a.all()) //Show as a Row-List
  //Sample --> [Row[10, Fri Jan 19 04:05:01 MST 2018, 9217], Row[10, Mon Feb 19 04:05:01 MST 2018, 9217], Row[10, Mon Mar 19 04:05:01 MDT 2018, 9217]]


  /** I have this example for the convertion but do not supports that format **/


  case class Sample (Registro: Int,Fecha: String,Valor: String )
  val agregado = Sample(999,"Wed May 20 15:19:21 MDT 31063531","982556517")
  val json= ("Reg_Num:"->agregado.Registro)~("TimeStamp:"->agregado.Fecha) ~ ("Value:"->agregado.Valor) //This is a List
  val JsonExam = println(compact(render(json)))              
  println ( pretty(render(json)) ) 
}
catch
  {
    case e: Exception => println(s"msg=${e.getMessage}")
  }

Basically, I want to convert from this format:

[Row[10, Fri Jan 19 04:05:01 MST 2018, 9217], Row[12, Mon Feb 20 04:05:01 MST 2018, 9216], Row[18, Tue Mar 21 04:05:01 MDT 2018, 9215]]

To this:

{
  "Reg_Num:" : 10,
  "TimeStamp:" : "Fri Jan 19 04:05:01 MST 2018",
  "Value:" : "9217"
},
{
  "Reg_Num:" : 12,
  "TimeStamp:" : "Mon Feb 20 04:05:01 MST 2018",
  "Value:" : "9216"
},
{
  "Reg_Num:" : 18,
  "TimeStamp:" : "Tue Mar 21 04:05:01 MDT 2018",
  "Value:" : "9215"
}

Upvotes: 2

Views: 649

Answers (1)

Zolani Maghwebu
Zolani Maghwebu

Reputation: 11

It will depend on which Json library you are using. In Play Json, we create "Writes" methods which take an instance of a case class and convert it to Json. When these are implicit then the compiler will do it "automatically" when needed. For example:

....
import play.api.libs.json._
case class Sample(Registro: Int, Fecha: String, Valor: String ){
object Sample {
  implicit val SamplenWrites = new Writes[Sample] {
    def writes(sample: Sample):JsValue = Json.obj(
        "reg_rum"-> sample.Registro,
        "timeStamp"-> sample.Fecha,
        "value" -> sample.Valor)
      }
    }
  }

Json.obj("samples" -> Sample(5, "Fri Jan 19", "9200"))

Upvotes: 1

Related Questions