2016-05-02 4 views
1

最初の居住者の名前にアクセスするにはどうすればよいですか?ここにJsonファイルがあります。次の後には何がありますか?ScalaのJsValueを読み取る

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

これはいくつかの方法で行うことができます。クラスのマッピングとの直接の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) 
     } 
    } 
} 
3

クイックや汚れの

例:

((jsonObject \ "residents").as[Seq[JsObject]].head \ "name").as[String] 
0

コードのあなたの一部は、JSONを返すので、あなたはすべてのJSONのメソッドを使用することができますJSON basics

アクセスの場合nameフィールド使用パス:(...\"name)"

名前取得のためにasメソッド:(...\"name").as[String]

関連する問題