Java 将Scala类(不是case类)转换为json

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

是否有一种方法可以将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._

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类的示例,好吗?