使用 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"
读取和写入原始 JSON
要读取和写入 JSON 文件,您可以按如下方式使用 uJson 和 OS-Lib
// read a JSON file
val json = ujson.read(os.read(os.pwd / "raw.json"))
// modify the JSON content
json("updated") = "now"
//write to a new file
os.write(os.pwd / "raw-updated.json", ujson.write(json))
使用 JSON 读取和写入 Scala 对象
要从 JSON 文件中读取和写入 Scala 对象,您可以按如下方式使用 uPickle 和 OS-Lib
import upickle.default._
case class PetOwner(name: String, pets: List[String])
implicit val ownerRw: ReadWriter[PetOwner] = macroRW
// read a PetOwner from a JSON file
val petOwner: PetOwner = read[PetOwner](os.read(os.pwd / "pet-owner.json"))
// create a new PetOwner
val petOwnerUpdated = petOwner.copy(pets = "Toolkitty" :: petOwner.pets)
// write to a new file
os.write(os.pwd / "pet-owner-updated.json", write(petOwnerUpdated))
import upickle.default.*
case class PetOwner(name: String, pets: List[String]) derives ReadWriter
// read a PetOwner from a JSON file
val petOwner: PetOwner = read[PetOwner](os.read(os.pwd / "pet-owner.json"))
// create a new PetOwner
val petOwnerUpdated = petOwner.copy(pets = "Toolkitty" :: petOwner.pets)
// write to a new file
os.write(os.pwd / "pet-owner-updated.json", write(petOwnerUpdated))
要将 Scala case 类(或枚举)序列化和反序列化为 JSON,我们需要一个 ReadWriter
实例。要了解 uPickle 如何为你生成它,你可以阅读 如何将 JSON 反序列化为对象? 或 如何将对象序列化为 JSON? 教程。