簡體   English   中英

將 Scala class(非案例類)轉換為 json [暫停]

[英]Convert Scala class (Not case class) to json [on hold]

有沒有辦法將 Scala 案例類轉換為 JSON 字符串。 我曾嘗試使用提升框架之類的框架,但它轉換的是案例類,而不是類。 如何為 Scala class 實現相同的目標?

幾乎每個 JSON 庫都有一種方法可以在 JSON 和包括Circe在內的本機對象之間進行轉換,我推薦它, play-jsonJackson等等。

本文為您介紹了許多庫,以便您可以選擇適合您需求的庫。

我注意到您的問題明確表示“不是案例類”。 在這種情況下,困難在於具有構造函數或訪問代表其內部 state 的 class 的私有值。 在這種情況下,play-json 使用 Reads/Writes 類型類,允許您自己公開或執行這些特定映射。 但是,在您的自定義(非大小寫)class 上編寫 getJson function 並返回庫本身想要的任何內容同樣簡單。 我的理解是,沒有一個庫可以將 class 序列化為 json,就像 Java 的底層序列化器可以以有意義的方式一樣,因為非案例類可能不會公開這些庫使用的隱藏類型和名稱字段。 不過我可能是錯的。

試試circe

在 scala 控制台中從他們的網站運行一個示例

Welcome to Scala 2.13.0 (OpenJDK 64-Bit Server VM, Java 11.0.4).
Type in expressions for evaluation. Or try :help.

scala> import io.circe.syntax._

val intsJson = List(1, 2, 3).asJson
println (intsJson)
import io.circe.syntax._

scala> 
scala> intsJson: io.circe.Json =
[
  1,
  2,
  3
]

scala> [
  1,
  2,
  3
]

另一個顯示使用真實 class 編碼的示例

scala> import io.circe.syntax._
import io.circe.Encoder
import io.circe.generic.semiauto.deriveEncoder

class Foo(val name: String, val size: Double)
implicit def encodeFoo: Encoder[Foo]= deriveEncoder

new Foo("foobar", 42.0).asJson

import io.circe.syntax._

scala> import io.circe.Encoder

scala> import io.circe.generic.semiauto.deriveEncoder

scala> 
scala> defined class Foo

scala> encodeFoo: io.circe.Encoder[Foo]

scala> 
scala> res0: io.circe.Json =
{
  "name" : "foobar",
  "size" : 42.0
}

我喜歡circe僅僅是因為它的靈活性。

有關更多選項,請參閱awesome-scala json列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM