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 檔案中,您可以新增對 Toolkit 的依賴關係

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 反序列化為物件

此頁面的貢獻者