我有以下格式的JSON正文:
val body =
{
"a": "hello",
"b": "goodbye"
}
我想提取“ a”的值(所以我要“ hello”)并将其存储在val中。我知道我应该使用“ parse”和“ Extract”(例如val parsedjson = parse(body).extract [String]),但是我不知道如何使用它们来专门提取“ a”的值]
您必须使用模式匹配/提取器:
val aOpt: List[String] = for {
JObject(map) <- parse(body)
JField("a", JString(value)) <- map
} yield value
或者使用查询DSL
parse(body) \ "a" match {
case JString(value) => Some(value)
case _ => None
}
这些是选项,因为您不能保证任意JSON都包含字段"a"
。
[extract
如果将整个JObject
提取到case class
中将很有意义。
要使用extract
,您需要创建一个与您要解析的JSON形状匹配的类。这是使用您的输入数据的示例:
val body ="""
{
"a": "hello",
"b": "goodbye"
}
"""
case class Body(a: String, b: String)
import org.json4s._
import org.json4s.jackson.JsonMethods._
implicit val formats = DefaultFormats
val b = Extraction.extract[Body](parse(body))
println(b.a) // hello