Scala 工具包

如何发送和接收 JSON?

语言

你可以在一行中要求整个工具包

//> using toolkit latest

或者,你只需要求 sttp 的特定版本

//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1

在你的 build.sbt 文件中,你可以添加对工具包的依赖

lazy val example = project.in(file("example"))
  .settings(
    scalaVersion := "3.2.2",
    libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
  )

或者,你只需要求 sttp 的特定版本

libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M1"

在你的 build.sc 文件中,你可以添加对工具包的依赖

object example extends ScalaModule {
  def scalaVersion = "3.2.2"
  def ivyDeps =
    Agg(
      ivy"org.scala-lang::toolkit:0.1.7"
    )
}

或者,你只需要求 sttp 的特定版本

ivy"com.softwaremill.sttp.client4::core:4.0.0-M1"

HTTP 和 JSON

JSON 是 HTTP 请求和响应正文的常见格式。

在下面的示例中,我们使用 GitHub REST API。你需要一个秘密 GitHub 身份验证令牌 来运行程序。不要与任何人分享你的令牌。

发送和接收 JSON

为了发送 JSON 请求并解析 JSON 响应,我们将 sttp 与 uJson 结合使用。

发送 JSON

要发送 JSON,你可以构造一个 uJson.Value 并将其作为请求正文中的字符串写入。

在以下示例中,我们使用 GitHub 用户端点 来更新经过身份验证的用户的个人资料。我们在 JSON 对象中提供了个人资料的新位置和简介。

import sttp.client4.quick._

val json = ujson.Obj(
  "location" -> "hometown",
  "bio" -> "Scala programmer"
)

val response = quickRequest
  .patch(uri"https://api.github.com/user")
  .auth.bearer(sys.env("GITHUB_TOKEN"))
  .header("Content-Type", "application/json")
  .body(ujson.write(json))
  .send()

println(response.code)
// prints: 200

println(response.body)
// prints the full updated profile in JSON
import sttp.client4.quick.*

val json = ujson.Obj(
  "location" -> "hometown",
  "bio" -> "Scala programmer"
)

val response = quickRequest
  .patch(uri"https://api.github.com/user")
  .auth.bearer(sys.env("GITHUB_TOKEN"))
  .header("Content-Type", "application/json")
  .body(ujson.write(json))
  .send()

println(response.code)
// prints: 200

println(response.body)
// prints the full updated profile in JSON

在运行程序之前,设置 GITHUB_TOKEN 环境变量。运行它之后,你应该在 GitHub 个人资料上看到你的新简介和位置。

从响应中解析 JSON

要从请求的响应中解析 JSON,你可以使用 ujson.read

我们再次使用 GitHub 用户端点,这次是为了获取经过身份验证的用户。

import sttp.client4.quick._

val response = quickRequest
  .get(uri"https://api.github.com/user")
  .auth.bearer(sys.env("GITHUB_TOKEN"))
  .send()

val json = ujson.read(response.body)

println(json("login").str)
// prints your login
import sttp.client4.quick.*

val response = quickRequest
  .get(uri"https://api.github.com/user")
  .auth.bearer(sys.env("GITHUB_TOKEN"))
  .send()

val json = ujson.read(response.body)

println(json("login").str)
// prints your login

在运行程序之前,设置 GITHUB_TOKEN 环境变量。运行程序应该会打印你自己的登录名。

使用 JSON 发送和接收 Scala 对象

或者,你可以使用 uPickle 使用 JSON 发送或接收 Scala 对象。阅读以下内容以了解 如何将对象序列化为 JSON如何将 JSON 反序列化为对象

此页面的贡献者