首先要知道有JsValue
JsNumber, JsString, JsObject, JsArray.. 都是 JsValue的小孩(專業一點說extends from JsValue trait)
Json是工具類(object喔) Josn.obj, Json.arr, Json.toJson
JsPath 按字面上來說就是Json的路徑相關的, 主要描述 key 而不是 value 就是橘色那些字
{
"name" : "Watership Down",
"location" : {
"lat" : 51.235685,
"long" : -1.309197
}
}
JsObject 相當於一個完整的tuple, Object的意思是有lat和long這兩的屬性的對象
"location" : {
"lat" : 51.235685,
"long" : -1.309197
}
JsNumber 就可以理解成 "long" : -1.309197, 我想其他的JsString, JsArray..大家也就懂了
耍些工具, 耍之前不要忘了 import play.api.libs.json._
val jsonString: JsString = Json.toJson("I can be JsString")
val jsonNumber: JsNumber = Json.toJson(100)
val jsonArrayOfInts = Json.toJson(List(1,2,3))
val jsonEmployee = Json.toJson(new Employee("henry")) //別想了, 哪有這麼好
Json.toJson[T](T)(implicit writes: Writes[T]) 用的這麼爽是因為有隱式參數,幫你轉換
來些code
case class Employee(name: String)
implicit val employeeWrites = new Writes[Employee] {
def writes(employee: Employee) = Json.obj(
"name" -> employee.name
)
}
val jsonEmployee = Json.toJson(new Employee("henry")) //可以轉換了, 隱式會自動把employeeWrites 當成writes參數