You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Scala内置函数解析简单JSON并提取字段?

解析JSON到Scala变量的实用方案

嘿,我之前也试过用Scala内置工具处理JSON,确实踩过点小坑,给你整理两种可行的方法:一种是用Scala旧版本自带的解析器(纯内置),另一种是现在社区主流的类型安全方案(配置简单,比内置的好用太多)。

方案一:用Scala内置的scala.util.parsing.json.JSON(适合Scala 2.11及更早版本)

这个是Scala标准库曾经自带的JSON解析工具,不过在2.11之后就被标记为废弃了,但如果你用的是旧版本,还是能凑合用。

首先要注意,你的input_json得是合法的Scala字符串,我给你调整了写法:

import scala.util.parsing.json.JSON

// 用三重引号包裹JSON,避免转义双引号
val input_json = """{"name" : "john", "id" : 101}"""

// 解析JSON,返回的是Option[Any],所以用模式匹配处理
JSON.parseFull(input_json) match {
  case Some(jsonMap: Map[String, Any]) =>
    // 手动转换类型(这也是内置工具的缺点,类型不安全)
    val v1 = jsonMap("name").asInstanceOf[String]
    val v2 = jsonMap("id").asInstanceOf[Int]
    println(s"解析结果:v1=$v1, v2=$v2") // 输出 解析结果:v1=john, v2=101
  case None =>
    println("JSON格式不对,解析失败啦")
  case other =>
    println(s"奇怪,解析出了意料之外的结果:$other")
}

注意:这个工具的类型转换是硬转的,如果JSON里的字段类型和你预期的不一样,会抛出ClassCastException,所以用的时候要小心。

方案二:用Play JSON(社区主流推荐,类型安全)

虽然这个不是纯内置的,但只需要加个依赖就能用,而且类型安全,错误处理也更清晰,比内置工具靠谱多了。

第一步,在你的build.sbt里添加依赖(版本号可以根据你的Scala版本调整):

libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2"

然后写解析代码:

import play.api.libs.json._

// 先定义一个样例类,和JSON的结构对应起来
case class User(name: String, id: Int)

// 让Play JSON自动推导这个样例类的JSON格式化器
implicit val userFormatter: OFormat[User] = Json.format[User]

val input_json = """{"name" : "john", "id" : 101}"""

// 解析JSON并验证类型
val parseResult = Json.parse(input_json).validate[User]

parseResult match {
  case JsSuccess(user, _) =>
    val v1 = user.name
    val v2 = user.id
    println(s"解析成功:v1=$v1, v2=$v2")
  case JsError(errors) =>
    println(s"解析出错了:$errors")
}

这个方案的好处是,要是JSON里的id不是数字,或者少了name字段,会直接返回清晰的错误信息,不会随便抛异常,代码也更易读。

小总结

如果必须用纯内置工具,只能选第一种,但要注意它的局限性;如果可以引入第三方库,强烈推荐第二种,写起来省心,维护起来也方便。

内容的提问来源于stack exchange,提问作者Vasudeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:22:25