2

I'm new to Scala and don't see a way to do this.

I have this class:

case class User(userId: Int, userName: String, email: String, password:   
String) {
  def this() = this(0, "", "", "")
}


case class Team(teamId: Int, teamName: String, teamOwner: Int,    
 teamMembers: List[User]) {

def this() = this(0, "", 0, Nil)
}

I'm sending post request as :-

 '{
  "teamId" : 9,
  "teamName" : "team name",
  "teamOwner" : 2,
  "teamMembers" : [ {
    "userId" : 1000,
    "userName" : "I am new member",
    "email" : "eamil",
    "password" : "password"
  }]
}'

I get request:-

I tried:-

 val data = (request.body \ "teamMembers")
 val data2 = (request.body \ "teamId")
 val data3 = (request.body \ "teamName")

 data: [{"userId":1000,"userName":"I am new 
 member","email":"eamil","password":"password"}]
data2: 9
data3: "team name"

How to convert data to User object?

   [{"userId":1000,"userName":"I am new     
   member","email":"email","password":"password"}]
masiboo
  • 4,537
  • 9
  • 75
  • 136
  • possible duplicate of [What JSON library to use in Scala?](http://stackoverflow.com/questions/8054018/what-json-library-to-use-in-scala) – cchantep Feb 20 '15 at 12:46

1 Answers1

2

As an option, you can read Users like this

import play.api.libs.json.{JsArray, Json}

case class User(
    userId: Int,
    userName: String,
    email: String,
    password: String) {
}

case class Team(
    teamId: Int,
    teamName: String,
    teamOwner: Int,
    teamMembers: List[User]) {
}

implicit val userFormat = Json.format[User]
implicit val teamFormat = Json.format[Team]

val jsonStr = """{
  "teamId" : 9,
  "teamName" : "team name",
  "teamOwner" : 2,
  "teamMembers" : [ {
    "userId" : 1000,
    "userName" : "I am new member",
    "email" : "eamil",
    "password" : "password"
  }]
}"""

val json = Json.parse(jsonStr)

// Team(9,team name,2,List(User(1000,I am new member,eamil,password)))
json.as[Team]

// Seq[User] = ListBuffer(User(1000,I am new member,eamil,password))
val users = (json \ "teamMembers").as[JsArray].value.map(_.as[User])
mavarazy
  • 7,562
  • 1
  • 34
  • 60