在scala中播放json:反序列化json忽略未知字段
我有一个JSON响应,我想将其解析为一个case类。但我只关心来自JSON的某些字段子集。例如: JSON返回{id:XYZ,name:ABC,//more fields} 我只关心case类上的字段以及我想要忽略的所有其他字段(那些没有映射到case类的字段只是忽略),类似于Jackson通过在scala中播放json:反序列化json忽略未知字段,json,scala,playframework,deserialization,Json,Scala,Playframework,Deserialization,我有一个JSON响应,我想将其解析为一个case类。但我只关心来自JSON的某些字段子集。例如: JSON返回{id:XYZ,name:ABC,//more fields} 我只关心case类上的字段以及我想要忽略的所有其他字段(那些没有映射到case类的字段只是忽略),类似于Jackson通过@JsonIgnoreProperties注释为Java所做的那样 Scala有类似的方法吗?你只需要做一个阅读器,如果Json满足了你的对象(它拥有你对象的所有属性,如果有更多属性也没关系),那么你可以
@JsonIgnoreProperties
注释为Java所做的那样
Scala有类似的方法吗?你只需要做一个阅读器,如果Json满足了你的对象(它拥有你对象的所有属性,如果有更多属性也没关系),那么你可以做一个简单的阅读器(或者格式化,如果你想读和写的话)。例如:
case class VehicleForList(
id: Int,
plate: String,
vehicleTypeName: String,
vehicleBrandName: String,
vehicleBrandImageUrl: Option[String],
vehicleColorName: String,
vehicleColorRgb: String,
ownerName: String,
membershipCode: Option[String],
membershipPhone: Option[String]
)
object VehicleForList {
implicit val vehicleForListFormat: Format[VehicleForList] = Json.format[VehicleForList]
}
如果您需要更复杂的对象,则可以手动使读取器:
case class VehicleForEdit(
id: Int,
plate: String,
ownerName: Option[String],
membershipId: Option[Int],
vehicleTypeId: Int,
vehicleBrandId: Int,
vehicleColorId: Int
)
object VehicleForEdit {
implicit val vehicleForEditReads: Reads[VehicleForEdit] = (
(__ \ "id").read[Int] and
(__ \ "plate").readUpperString(plateRegex) and
(__ \ "ownerName").readNullableTrimmedString(defaultStringMinMax) and
(__ \ "membershipId").readNullable[Int] and //This field is optional, can be or not be present in the Json
(__ \ "vehicleTypeId").read[Int].map(_.toString) and // Here we change the data type
(__ \ "vehicleBrandId").read[Int] and
(__ \ "vehicleColorId").read[Int]
)(VehicleForEdit.apply _)
}
简单的读取器或格式已经忽略了不属于object@rekiem87反过来怎么样?如果case类有JSON中不存在的额外字段,而您希望忽略这些字段,那么您可以创建读取器(检查下面的答案)并为其他字段分配默认值,或者将其设置为可选,并保留为无