Java 将Scala类(不是case类)转换为json
是否有一种方法可以将Scala案例类转换为JSON字符串。我曾尝试使用像lift框架这样的框架,但它转换的是case类,而不是类。如何实现Scala类的相同功能?试试 在scala控制台中从其网站运行:Java 将Scala类(不是case类)转换为json,java,scala,Java,Scala,是否有一种方法可以将Scala案例类转换为JSON字符串。我曾尝试使用像lift框架这样的框架,但它转换的是case类,而不是类。如何实现Scala类的相同功能?试试 在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
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
]
另一个示例显示使用真实类进行编码:
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只是因为它的灵活性
有关更多选项,请参见列表。请尝试
在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
]
另一个示例显示使用真实类进行编码:
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只是因为它的灵活性
有关更多选项,请参见列表。几乎每个JSON库都有一种在JSON和本机对象之间转换的方法,包括我推荐的,等等 让您参观许多图书馆,以便选择一个适合您需要的图书馆
我注意到你的问题明确地说“不是案例类”。在这种情况下,困难在于拥有一个构造函数或访问表示其内部状态的该类的私有值。在这个场景中,play json使用读/写类型类,允许您自己公开或执行这些特定映射。然而,在自定义(非case)类上编写一个getJson函数并返回库本身想要的任何内容也同样简单。我的理解是,没有一个库可以像java的底层序列化程序那样以有意义的方式将类序列化为json,因为非case类可能不会公开这些库使用的隐藏类型和名称字段。但是我可能错了。几乎每个JSON库都有一种在JSON和本机对象之间转换的方法,包括我推荐的,等等 让您参观许多图书馆,以便选择一个适合您需要的图书馆
我注意到你的问题明确地说“不是案例类”。在这种情况下,困难在于拥有一个构造函数或访问表示其内部状态的该类的私有值。在这个场景中,play json使用读/写类型类,允许您自己公开或执行这些特定映射。然而,在自定义(非case)类上编写一个getJson函数并返回库本身想要的任何内容也同样简单。我的理解是,没有一个库可以像java的底层序列化程序那样以有意义的方式将类序列化为json,因为非case类可能不会公开这些库使用的隐藏类型和名称字段。但我可能错了。请尝试使用Gson、Json4s和spary json库。另外,请分享您正在尝试重构代码的代码片段,以便您需要序列化的部分可以成为case类。使用case类,每个Scala JSON库都可以自动派生reads/writes.Hi,Ani!请给出一个需要使用预期JSON示例序列化的非case类的示例。请尝试使用Gson、Json4s和spary JSON库。另外,请分享您正在尝试重构代码的代码片段,以便您需要序列化的部分可以成为case类。使用case类,每个Scala JSON库都可以自动派生reads/writes.Hi,Ani!请给出一个需要使用预期JSON样本序列化的非case类的示例,好吗?