Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在scala中播放json:反序列化json忽略未知字段_Json_Scala_Playframework_Deserialization - Fatal编程技术网

在scala中播放json:反序列化json忽略未知字段

在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满足了你的对象(它拥有你对象的所有属性,如果有更多属性也没关系),那么你可以

我有一个JSON响应,我想将其解析为一个case类。但我只关心来自JSON的某些字段子集。例如: JSON返回{id:XYZ,name:ABC,//more fields} 我只关心case类上的字段以及我想要忽略的所有其他字段(那些没有映射到case类的字段只是忽略),类似于Jackson通过
@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中不存在的额外字段,而您希望忽略这些字段,那么您可以创建读取器(检查下面的答案)并为其他字段分配默认值,或者将其设置为可选,并保留为无