play.api.libs.json
可以表示JSON数据的数据结构,也可以用于在json数据结构和其他数据表示之间进行转换。该软件包的某些功能包括:
1.自动转通过case class达到最小的引用,如果你想用最少的代码运行,这是最好的方法。
2.用自定义验证进行解析
3.解析request body 中的数据为json,如果content无法解析或者提供的Content-type错误,通过自动生成错误。
4.可以在Play应用程序外部用作独立库。只需添加libraryDependencies += "com.typesafe.play" %% "play-json" % playVersion到您的build.sbt文件即可。
JsValue
这是代表所有JSON值一个trait。JSON库具有一个case类,该类扩展JsValue
为表示每种有效JSON类型:
JsString
JsNumber
JsBoolean
JsObject
JsArray
JsNull
使用JsValue各种类型,您可以构造任何JSON结构的表示形式。
Json
该Json对象提供主要用于与JsValue结构之间的转换的接口。
JsPath
表示JsValue的结构路径,类似于XML中的XPath。用于遍历JsValue结构,并用于隐式转换器。
转换为JsValue
1.使用字符串解析
import play.api.libs.json._
//使用Json.parse把string类型的数据转成json数据
val json: JsValue = Json.parse("""
{
"name" : "Watership Down",
"location" : {
"lat" : 51.235685,
"long" : -1.309197
},
"residents" : [ {
"name" : "Fiver",
"age" : 4,
"role" : null
}, {
"name" : "Bigwig",
"age" : 6,
"role" : "Owsla"
} ]
}
""")
2.使用类构造
import play.api.libs.json._
val json: JsValue = JsObject(Seq(
"name" -> JsString("Watership Down"),
"location" -> JsObject(Seq("lat" -> JsNumber(51.235685), "long" -> JsNumber(-1.309197))),
"residents" -> JsArray(IndexedSeq(
JsObject(Seq(
"name" -> JsString("Fiver"),
"age" -> JsNumber(4),
"role" -> JsNull
)),
JsObject(Seq(
"name" -> JsString("Bigwig"),
"age" -> JsNumber(6),
"role" -> JsString("Owsla")
))
))
))
也可以使用Json.obj和Json.arr来简化这种使用类来构造的json,大部分数值不需要用JsValue类进行显示包装,工厂方法是用因式转换。
import play.api.libs.json.{
JsNull, Json, JsString, JsValue }
//Json.obj来替代JsObject,使用Json.arr来替代JsArray,但是可以不使用JsValue(JsString、JsNumber)等来封装。
val json: JsValue = Json.obj(
"name" -> "Watership Down",
"location"