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