In the play-scala around the handle JSON can present a very bad,
such as lift-json, prefer to work well with other libraries.
so I try to experiment,googl-served to keep a record so the easiest Gson.
1.create play application
$ play new jsonsample --with scala
2.get Gson lib
use dependency management eatures in play.conf/dependencies.yml
# Application dependencies require: - play - play -> scala 0.9 - com.google.code.gson -> gson 1.7.1
and then,execute deps command.
$ cd jsonsample $ play depsavailable Gson.
3.create Controller
To create a Controller that will be returned in the Json format data from the default index method.import com.google.gson.Gson def index = { val gson: Gson = new Gson() val array = new Array[String](3) array(0) = "apple" array(1) = "orange" array(2) = "banana" Json(gson.toJson(array)) }the array returned in JSON format.
["apple","orange","banana"]
Map case.
※conversion from Scala Map to java.util.Map
import com.google.gson.Gson import scala.collection.JavaConversions._ def index = { val gson: Gson = new Gson() var map = Map("key1"->"val1", "key2"->"val2") val jMap: java.util.Map[String, String] = map Json(gson.toJson(jMap)) }
result is
{"key1":"val1","key2":"val2"}
Object in List case.
package controllers import com.google.gson.Gson import java.util.List import java.util.ArrayList import scala.collection.JavaConversions._ object Application extends Controller { def index = { val gson: Gson = new Gson() val user1 = Person("syuta",30) val user2 = Person("taro",20) val s1 = Skill("Java","Program language") val s2 = Skill("Scala","Program language") val s3 = Skill("MySQL","Database") val list1 = new ArrayList[Skill] list1.add(s1) list1.add(s2) list1.add(s3) user1.skills = list1 val list2 = new ArrayList[Skill] list2.add(s2) list2.add(s3) user2.skills = list2 val str1 = gson.toJson(user1) println(str1) val str2 = gson.toJson(user2) println(str2) val resList:List[Person] = new ArrayList[Person]() resList.add(user1) resList.add(user2) Json(gson.toJson(resList)) } } case class Person(var name: String,var age: Int) { var skills:List[Skill] = _ } case class Skill(var name: String,var category:String)
result is
[{"name":"syuta","age":30,"skills":[{"name":"Java","category":"Program language"},{"name":"Scala","category":"Program language"},{"name":"MySQL","category":"Database"}]},{"name":"taro","age":20,"skills":[{"name":"Scala","category":"Program language"},{"name":"MySQL","category":"Database"}]}]no problem case class.