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

如何在Scala中使用Jackson反序列化JSON并提取column与datatype字段

Scala 使用Jackson反序列化指定JSON的实现方案

前置依赖

首先在sbt配置中添加Jackson相关依赖,版本可根据你的Scala版本适配调整:

libraryDependencies ++= Seq(
  "com.fasterxml.jackson.core" % "jackson-databind" % "2.15.2",
  "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.2"
)

完整实现代码

通过样例类映射JSON结构,反序列化后直接提取字段生成目标格式:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

// 映射JSON内层columnreq数组的元素结构
case class ColumnItem(column: String, datatype: String)
// 映射整个JSON的根结构
case class JsonSchema(
  columnreq: List[ColumnItem],
  databaseName: String,
  sourceTableName: String
)

object JacksonDeserializeDemo extends App {
  // 待解析的原始JSON字符串
  val rawJson =
    """
      {
        "columnreq": [
          {
            "column": "date",
            "datatype": "string"
          },
          {
            "column": "name",
            "datatype": "int"
          }
        ],
        "databaseName": "test",
        "sourceTableName": "department"
      }
    """.stripMargin

  // 初始化Jackson解析器,注册Scala专用模块以支持样例类解析
  val jacksonMapper = new ObjectMapper() with ScalaObjectMapper
  jacksonMapper.registerModule(DefaultScalaModule)

  // 执行反序列化
  val parsedData = jacksonMapper.readValue[JsonSchema](rawJson)

  // 生成列名-类型映射Map
  val columnTypeMap: Map[String, String] = parsedData.columnreq.map(item => item.column -> item.datatype).toMap
  // 生成列名-类型二元组列表
  val columnTypeList: List[(String, String)] = parsedData.columnreq.map(item => (item.column, item.datatype))

  // 单独给指定列赋值变量示例
  val dateColumnType = columnTypeMap("date")
  val nameColumnType = columnTypeMap("name")

  // 测试打印
  println(s"列类型映射:$columnTypeMap")
  println(s"列类型列表:$columnTypeList")
  println(s"date列的类型:$dateColumnType")
}

运行结果

执行代码后输出如下:

列类型映射:Map(date -> string, name -> int)
列类型列表:List((date,string), (name,int))
date列的类型:string

你可以根据需求选择返回Map或者列表格式,也可以直接从样例类对象中读取databaseName、sourceTableName等其他根字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:12:00