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

如何使用Spray Json将Scala样例类对象转换为JSON字符串

使用Spray Json将Scala样例类转换为JSON字符串

1. 添加依赖

先在你的SBT构建文件里添加Spray Json的依赖(根据Scala版本调整,以下是Scala 2.13的示例版本):

libraryDependencies += "io.spray" %% "spray-json" % "1.3.6"

2. 导入核心包

在代码里导入Spray Json的核心类和默认协议:

import spray.json._
import DefaultJsonProtocol._

3. 为样例类定义JSON格式

Spray Json需要隐式的JsonFormat实例来处理自定义样例类,我们可以用DefaultJsonProtocol提供的宏自动生成:

// 先定义Address的格式,因为DriverDetails依赖它
implicit val addressFormat: RootJsonFormat[Address] = jsonFormat4(Address)
// 再定义DriverDetails的格式,注意字段顺序要和样例类定义完全一致
implicit val driverDetailsFormat: RootJsonFormat[DriverDetails] = jsonFormat5(DriverDetails)

说明:jsonFormatN里的数字N对应样例类的字段数量,Address有4个字段用jsonFormat4,DriverDetails有5个字段用jsonFormat5。

4. 转换样例类对象为JSON字符串

创建DriverDetails实例后,直接调用toJson方法,再转成字符串即可:

// 创建Address实例
val address = Address(Some("Main St"), "New York", "NY", List("123-456-7890", "098-765-4321"))
// 创建DriverDetails实例
val driver = DriverDetails(
  userId = "driver_001",
  names = Some(List("John", "Doe")),
  addresses = Some(List(address)),
  invalidData = Some(Map("error" -> Map("field1" -> List("invalid format", "too short")))),
  vehicleIds = List("veh_100", "veh_101")
)

// 转换为格式化后的JSON字符串
val jsonString = driver.toJson.prettyPrint
// 打印结果
println(jsonString)

输出示例

运行后会得到如下格式化的JSON:

{
  "userId": "driver_001",
  "names": [
    "John",
    "Doe"
  ],
  "addresses": [
    {
      "street": "Main St",
      "city": "New York",
      "state": "NY",
      "contactNumbers": [
        "123-456-7890",
        "098-765-4321"
      ]
    }
  ],
  "invalidData": {
    "error": {
      "field1": [
        "invalid format",
        "too short"
      ]
    }
  },
  "vehicleIds": [
    "veh_100",
    "veh_101"
  ]
}

注意事项

  • 如果样例类中的Option字段值为None,转换后的JSON会自动忽略该字段,不会输出null。
  • 必须保证jsonFormatN的字段顺序和样例类定义的顺序完全一致,否则会出现字段映射错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:47:10