Scala 工具包

如何读写 JSON 文件?

语言

使用 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? 教程。

此页面的贡献者