Scala 手動讀取 JSON
如果給你一個 JSON 字串:
val str =
"""{
| "name" : "Jsony McJsonface",
| "age" : 18,
| "hobbies" : [ "Fishing", "Hunting", "Camping" ],
| "pet" : {
| "name" : "Doggy",
| "type" : "dog"
| }
|}""".stripMargin
你可以解析它以獲取表示 JSON 樹的 JsValue
val json = Json.parse(str)
並遍歷樹以查詢特定值:
(json \ "name").as[String] // "Jsony McJsonface"
有用的方法
\
轉到 JSON 物件中的特定鍵\\
轉到 JSON 物件中特定鍵的所有出現,在巢狀物件中遞迴搜尋.apply(idx)
(即(idx)
)轉到陣列中的索引.as[T]
投射到精確的亞型.asOpt[T]
試圖轉換為精確的子型別,如果型別錯誤則返回 None.validate[T]
嘗試將 JSON 值轉換為精確的子型別,返回 JsSuccess 或 JsError
(json \ "name").as[String] // "Jsony McJsonface"
(json \ "pet" \ "name").as[String] // "Doggy"
(json \\ "name").map(_.as[String]) // List("Jsony McJsonface", "Doggy")
(json \\ "type")(0).as[String] // "dog"
(json \ "wrongkey").as[String] // throws JsResultException
(json \ "age").as[Int] // 18
(json \ "hobbies").as[Seq[String]] // List("Fishing", "Hunting", "Camping")
(json \ "hobbies")(2).as[String] // "Camping"
(json \ "age").asOpt[String] // None
(json \ "age").validate[String] // JsError containing some error detail