如何访问第一位居民的姓名?这是Json文件。以下是什么?
val bigwig = (json \ "residents")(1).....
import play.api.libs.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"
} ]
}
""")
答案 0 :(得分:6)
快速而肮脏(未经验证):
((jsonObject \ "residents").as[Seq[JsObject]].head \ "name").as[String]
答案 1 :(得分:0)
你可以通过几种方式做到这一点。
类映射和直接json字段访问的示例
import play.api.libs.json.{JsError, JsSuccess, Json}
case class JsonSchemaView(name: String, location: Location, residents: Seq[Resident])
case class Location(lat: Double, long: Double)
case class Resident(name: String, age: Int, role: Option[String])
object Location {
implicit val locationFormat = Json.format[Location]
}
object Resident {
implicit val residentFormat = Json.format[Resident]
}
object JsonSchemaView {
implicit val jsonSchemaViewFormat = Json.format[JsonSchemaView]
}
object Runner {
def main (args: Array[String]) {
val mySchemaView = JsonSchemaView("name", Location(40, -40), Seq(Resident("ress", 4, None), Resident("josh", 16, Option("teenager"))))
val json = Json.toJson(mySchemaView)
println(Json.prettyPrint(json))
val myParsedSchema = Json.parse(json.toString).validate[JsonSchemaView]
myParsedSchema match {
case JsSuccess(schemaView, _) =>
println(s"success: $schemaView")
case error: JsError =>
println(error)
}
//The hard way
val jsonObject = Json.parse(json.toString())
(jsonObject \ "name").validate[String] match {
case JsSuccess(name, _) =>
println(s"success: $name")
case error: JsError =>
println(error)
}
(jsonObject \ "residents").validate[Seq[JsObject]] match {
case JsSuccess(residents, _) =>
residents foreach { resident =>
println((resident \ "age").as[Int]) //unsafe, using the wrong type will cause an exception
}
case error: JsError =>
println(error)
}
}
}
答案 2 :(得分:0)
您的部分代码返回Json,因此您可以使用JSON basics
中的所有Json方法对于访问name
字段使用路径:(...\"name)"
要获取名称值,请使用as
方法:(...\"name").as[String]