Вам придется использовать сопоставление шаблонов / экстракторы:
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
.