自动推导结构类型的编解码器
Automatic derivation of codecs for structural types
给定以下JSON结构
val rawJson =
"""
|{
| "users": [
| {
| "name": "Mario",
| "age": 10,
| "address": {
| "street": "13 Blvd",
| "postcode": "ABC 123"
| }
| },
| {
| "name": "Wario",
| "age": 70,
| "address": {
| "street": "22 Blvd",
| "postcode": "CBA 321"
| }
| }
| ]
|}
""".stripMargin
及对应型号
case class Address(street: String, postcode: String)
case class User(name: String, age: Int, address: Address)
case class RequestBody(users: List[User])
circe 能够自动反序列化
decode[RequestBody](rawJson))
当模型像这样通过结构类型定义时,是否可以自动反序列化
case class RequestBody(users: List[ {
val name: String
val age: Int
val address: {
val street: String
val postcode: String
}
}])
我猜没有。 Circe 在底层使用 Shapeless 来导出编解码器。 Shapeless 适用于 ADT,即密封特征 + 大小写 类。结构类型不是 ADT。
给定以下JSON结构
val rawJson =
"""
|{
| "users": [
| {
| "name": "Mario",
| "age": 10,
| "address": {
| "street": "13 Blvd",
| "postcode": "ABC 123"
| }
| },
| {
| "name": "Wario",
| "age": 70,
| "address": {
| "street": "22 Blvd",
| "postcode": "CBA 321"
| }
| }
| ]
|}
""".stripMargin
及对应型号
case class Address(street: String, postcode: String)
case class User(name: String, age: Int, address: Address)
case class RequestBody(users: List[User])
circe 能够自动反序列化
decode[RequestBody](rawJson))
当模型像这样通过结构类型定义时,是否可以自动反序列化
case class RequestBody(users: List[ {
val name: String
val age: Int
val address: {
val street: String
val postcode: String
}
}])
我猜没有。 Circe 在底层使用 Shapeless 来导出编解码器。 Shapeless 适用于 ADT,即密封特征 + 大小写 类。结构类型不是 ADT。