json 中未包含 Circe 特征字段
Circe trait fields not included in json
我有一个简单的特征,在某些情况下混合 classes。通过 circe 将 classes 的实例转换为 JSON 时,我意识到 JSON 字符串中不包含特征中具有默认值的字段。
我正在使用 io.circe.generic.auto._
进行编码
举例说明:
trait Base {
var timestamp: Timestamp = new Timestamp(System.currentTimeMillis())
var version = 0
}
case class CC(id: String) extends Base
val cc = CC("testId")
val str = cc.asJson.noSpaces
给出:{"id":"testId"}
所以str
不包含我期望的时间戳和版本值
我假设它使用编码器来处理 class 并且只是跳过了一个特征。我还需要做什么才能包含这些字段?
在不同版本的 circe(0.3.0 和 0.6.0)中尝试过
我也可以稍后从 JSON 字符串中解码这些字段(可以有其他值),或者我最好保留这个字段抽象并使用默认参数以防 classes?
您需要将这些字段直接添加到 CC 案例中 class,或者明确定义您自己的编码器。
我会这样做:
trait Base {
def timestamp: Timestamp
def version: Int
}
case class CC(id: String, timestamp: Timestamp, version: Int)
extends Base
object CC {
def apply(id: String) = new CC(
id, new Timestamp(System.currentTimeMillis()), 0
)
}
val cc = CC("testId")
val str = cc.asJson.noSpaces
我有一个简单的特征,在某些情况下混合 classes。通过 circe 将 classes 的实例转换为 JSON 时,我意识到 JSON 字符串中不包含特征中具有默认值的字段。
我正在使用 io.circe.generic.auto._
进行编码
举例说明:
trait Base {
var timestamp: Timestamp = new Timestamp(System.currentTimeMillis())
var version = 0
}
case class CC(id: String) extends Base
val cc = CC("testId")
val str = cc.asJson.noSpaces
给出:{"id":"testId"}
所以str
不包含我期望的时间戳和版本值
我假设它使用编码器来处理 class 并且只是跳过了一个特征。我还需要做什么才能包含这些字段?
在不同版本的 circe(0.3.0 和 0.6.0)中尝试过
我也可以稍后从 JSON 字符串中解码这些字段(可以有其他值),或者我最好保留这个字段抽象并使用默认参数以防 classes?
您需要将这些字段直接添加到 CC 案例中 class,或者明确定义您自己的编码器。
我会这样做:
trait Base {
def timestamp: Timestamp
def version: Int
}
case class CC(id: String, timestamp: Timestamp, version: Int)
extends Base
object CC {
def apply(id: String) = new CC(
id, new Timestamp(System.currentTimeMillis()), 0
)
}
val cc = CC("testId")
val str = cc.asJson.noSpaces