0

I have created a ArrayBuffer from inside for loop. Now I want to create json string out of the same ArrayBuffer

below code i used to create Array buffer val res=new ArrayBuffer[ArrayBuffer[_>:Any]]

`df =
+---+---+
| _1| _2|
+---+---+
|  1|  5|
|  2| 57|
+---+---+



df.collect.foreach(x=> {
  res += ArrayBuffer(x(0), x(1))
})

Need Below json String from above ArrayBuffer dynamically without below hard-codede array values

val str = "head"

val cur  = """{"%s":{"%s":"%s","%s":"%s"}}""".format(str,res(0)(0),res(0)(1),res(1)(0),res(1)(1))

Expected Output should be below as dynamic based on ArrayBuffer size. And column will be 2 but number of rows can increase or decrease.

Array Buffer is like this --> ArrayBuffer(ArrayBuffer(1, 5), ArrayBuffer(2, 57)) 

Expected Json

{"head":{"1":"5","2":"57"}}

1 Answer 1

1

I suggest you to use a Json serializer. The easiest one to me is play-json.

You can add it to your sbt like this:

libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2"

https://mvnrepository.com/artifact/com.typesafe.play/play-json

Then it's simple as

   // convert to a list of tuple
   val body: ArrayBuffer[(String, JsValue)] = res.map(e => (e.head.toString, Json.toJson(e(1))))
  
   print(Json.toJson(Json.obj({"head" -> JsObject(list)})))

There is more examples here : https://www.playframework.com/documentation/2.8.x/ScalaJson

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Man !!! yessss ArrayBuffer(ArrayBuffer(1, 5), ArrayBuffer(2, 57), ArrayBuffer(3, 56)) {"head":{"1":"5","2":"57","3":"56"}}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.