[使用Scala使用Json4s从JSON提取字符串

问题描述 投票:0回答:2

我有以下格式的JSON正文:

val body = 
{
    "a": "hello",
    "b": "goodbye"
}

我想提取“ a”的值(所以我要“ hello”)并将其存储在val中。我知道我应该使用“ parse”和“ Extract”(例如val parsedjson = parse(body).extract [String]),但是我不知道如何使用它们来专门提取“ a”的值]

json scala parsing json4s
2个回答
0
投票

您必须使用模式匹配/提取器:

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"

请参见documentation

[extract如果将整个JObject提取到case class中将很有意义。


0
投票

要使用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
© www.soinside.com 2019 - 2024. All rights reserved.