[英]Convert Scala class (Not case class) to json [on hold]
有沒有辦法將 Scala 案例類轉換為 JSON 字符串。 我曾嘗試使用提升框架之類的框架,但它轉換的是案例類,而不是類。 如何為 Scala class 實現相同的目標?
幾乎每個 JSON 庫都有一種方法可以在 JSON 和包括Circe在內的本機對象之間進行轉換,我推薦它, play-json , Jackson等等。
本文為您介紹了許多庫,以便您可以選擇適合您需求的庫。
我注意到您的問題明確表示“不是案例類”。 在這種情況下,困難在於具有構造函數或訪問代表其內部 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.