Scala:如何在JSON中序列化数据?
我最近开始学习Scala。我需要一种用Json序列化数据的简单方法。下面我将给出一个数据示例。我尝试了几个流行的库:,,但没有得到结果!GSON不知道如何使用Option(例如Option[String]),在使用JSON和Circe时,他们需要描述抽象类的序列化和反序列化(我不知道如何解决这个问题)Scala:如何在JSON中序列化数据?,json,scala,serialization,json-serialization,Json,Scala,Serialization,Json Serialization,我最近开始学习Scala。我需要一种用Json序列化数据的简单方法。下面我将给出一个数据示例。我尝试了几个流行的库:,,但没有得到结果!GSON不知道如何使用Option(例如Option[String]),在使用JSON和Circe时,他们需要描述抽象类的序列化和反序列化(我不知道如何解决这个问题) 您需要为案例类创建一个伴生对象,如下所示: object Data { import play.api.libs.json._ implicit val read = Json.reads
您需要为案例类创建一个伴生对象,如下所示:
object Data {
import play.api.libs.json._
implicit val read = Json.reads[Data]
implicit val write = Json.writes[Data]
implicit val dataFormat = Json.format[Data]
def tupled = (Data.apply _).tupled
}
案例类和对象必须放在同一个文件中
然后,当您需要使用它时,导入play.api.libs.json
val myObject = new Data(100, None, None)
val myJson = Json.toJson(myObject)
Obs:这是一个播放框架库,如果您不使用此fw,我不确定您是否可以使用它
另一个obs。。。将对象转换为json时,所有的可选参数(如果是无)将不会显示在json值中。因此,在我的示例中,结果将不包含用户和数据参数:
{
"id": 100
}
您需要为案例类创建一个伴生对象,如下所示:
object Data {
import play.api.libs.json._
implicit val read = Json.reads[Data]
implicit val write = Json.writes[Data]
implicit val dataFormat = Json.format[Data]
def tupled = (Data.apply _).tupled
}
案例类和对象必须放在同一个文件中
然后,当您需要使用它时,导入play.api.libs.json
val myObject = new Data(100, None, None)
val myJson = Json.toJson(myObject)
Obs:这是一个播放框架库,如果您不使用此fw,我不确定您是否可以使用它
另一个obs。。。将对象转换为json时,所有的可选参数(如果是无)将不会显示在json值中。因此,在我的示例中,结果将不包含用户和数据参数:
{
"id": 100
}
使用circe:
import cats.syntax.functor._
import io.circe.{Decoder, Encoder}, io.circe.generic.auto._
import io.circe.syntax._
implicit val encodeBase: Encoder[Base] = Encoder.instance {
case foo @ A(_, _, _) => foo.asJson
case bar @ B(_, _, _) => bar.asJson
}
然后你就可以
test.asJson
使用circe:
import cats.syntax.functor._
import io.circe.{Decoder, Encoder}, io.circe.generic.auto._
import io.circe.syntax._
implicit val encodeBase: Encoder[Base] = Encoder.instance {
case foo @ A(_, _, _) => foo.asJson
case bar @ B(_, _, _) => bar.asJson
}
然后你就可以
test.asJson
对于
circe
,请检查本页的circe
,请检查本页,给出一个示例请,给出一个示例