Scala处理含嵌套Map与List的JSON:解析提取及过滤需求
在Scala中解析JSON并过滤名称列表的实现方案
我来帮你搞定这个需求!在Scala里处理JSON,最常用的是Play JSON或者Circe库,下面我用Play JSON为例,一步步实现你的需求:
1. 添加依赖(SBT)
首先在你的build.sbt里添加Play JSON的依赖(版本可以根据Scala版本调整,这里用最新稳定版举例):
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2"
2. 定义JSON对应的Case Class(可选但推荐)
为了更清晰地映射JSON结构,我们可以定义对应的case class,并生成JSON格式化器:
import play.api.libs.json._ // 逐层映射JSON结构的case class case class Link(address: String) case class Links(self: List[Link]) case class Details( key: String, server: String, owner: String, `type`: String, // 注意type是Scala关键字,需要加反引号 links: Links ) case class ApiValue(name: String, upstatus: String, details: Details) case class ApiResponse(size: Int, values: List[ApiValue]) // 自动生成JSON格式化器,用于解析和序列化 implicit val linkFormat: OFormat[Link] = Json.format[Link] implicit val linksFormat: OFormat[Links] = Json.format[Links] implicit val detailsFormat: OFormat[Details] = Json.format[Details] implicit val apiValueFormat: OFormat[ApiValue] = Json.format[ApiValue] implicit val apiResponseFormat: OFormat[ApiResponse] = Json.format[ApiResponse]
3. 解析JSON并提取名称列表
现在可以把API返回的JSON字符串解析成我们定义的对象,然后提取所有name字段:
// 模拟API返回的JSON字符串 val apiJsonStr = """{ "size": 20, "values": [{ "name": "mullock", "upstatus": "Green", "details": { "key": "rupture farms", "server": "mudos", "owner": "magog_cartel", "type": "NORMAL", "links": { "self": [{ "address": "https..." }] } } }] }""" // 解析JSON字符串为ApiResponse对象 val parsedResponse = Json.parse(apiJsonStr).as[ApiResponse] // 提取所有name到列表 val allNames: List[String] = parsedResponse.values.map(_.name)
4. 用另一个列表过滤名称
假设你有一个用于过滤的白名单列表,比如allowedNames,我们可以用Scala的集合操作快速完成过滤:
// 示例过滤列表 val allowedNames = List("mullock", "slig", "mudokon") // 过滤出在允许列表中的名称 val filteredNames: List[String] = allNames.filter(allowedNames.contains)
简化方案:无需Case Class直接提取
如果你不想定义case class,也可以直接通过JSON路径提取name字段:
val namesDirectly: List[String] = (Json.parse(apiJsonStr) \ "values") .as[List[JsValue]] .map(_ \ "name") .as[List[String]]
这种方式更轻量,但可读性不如case class方案,适合简单场景。
内容的提问来源于stack exchange,提问作者crowgers
相关产品推荐
相关产品推荐

