Scala 工具包

uPickle 还能做什么?

语言

使用 Scala CLI,你可以在一行中要求整个工具包

//> using toolkit latest

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

//> using dep com.lihaoyi::upickle:3.1.0

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

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

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

libraryDependencies += "com.lihaoyi" %% "upickle" % "3.1.0"

在你的 build.sc 文件中,你可以添加对 upickle 库的依赖

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

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

ivy"com.lihaoyi::upickle:3.1.0"

使用 uJson 构建新的 JSON 结构

val obj: ujson.Value = ujson.Obj(
  "library" -> "upickle",
  "versions" -> ujson.Arr("1.6.0", "2.0.0", "3.1.0"),
  "documentation" -> "https://com-lihaoyi.github.io/upickle/",
)

uJson 文档 中了解有关在 JSON 中构建的更多信息。

定义自定义 JSON 序列化

你可以通过映射 ujson.Value 来自定义数据类型的 ReadWriter,如下所示

import upickle.default._

case class Bar(i: Int, s: String)

object Bar {
  implicit val barReadWriter: ReadWriter[Bar] = readwriter[ujson.Value]
    .bimap[Bar](
      x => ujson.Arr(x.s, x.i),
      json => new Bar(json(1).num.toInt, json(0).str)
    )
}

val bar = Bar(5, "bar")
val json = upickle.default.write(bar)
println(json)
// prints: [5, "bar"]
import upickle.default.*

case class Bar(i: Int, s: String)

object Bar:
  given ReadWriter[Bar] = readwriter[ujson.Value]
    .bimap[Bar](
      x => ujson.Arr(x.s, x.i),
      json => new Bar(json(1).num.toInt, json(0).str)
    )

val bar = Bar(5, "bar")
val json = upickle.default.write(bar)
println(json)
// prints: [5, "bar"]

uPickle 文档 中了解有关自定义 JSON 序列化的更多信息。

此页面的贡献者