scala-使用json4s分解时如何更改字段名?

scala-使用json4s分解时如何更改字段名?,json,scala,json4s,Json,Scala,Json4s,使用Json Play当我想用自定义字段名返回SalesData的Json表示时,我是在如下所示的写操作的帮助下完成的。使用Json4s是否可以获得相同的结果?我从文档中读到,默认情况下,构造函数参数名必须与json字段名匹配。 下面是我如何使用Play framework完成的: object SalesProcessor { case class SalesData(saleId: Int, saleType: String) implicit val saleReads:

使用
Json Play
当我想用自定义字段名返回
SalesData
的Json表示时,我是在如下所示的写操作的帮助下完成的。使用
Json4s
是否可以获得相同的结果?我从文档中读到,默认情况下,构造函数参数名必须与json字段名匹配。

下面是我如何使用Play framework完成的:

object SalesProcessor {
    case class SalesData(saleId: Int, saleType: String)
    implicit val saleReads: Reads[SalesData] = (
        (JsPath \ "saleId").read[Int] and
        (JsPath \ "saleType").read[String]
    ) (SalesData.apply _)

    implicit val saleWrites: Writes[SalesData] = (
       (JsPath \ "id").write[String] and
         (JsPath \ "type").write[String]
       ) (unlift(SalesData.unapply))

    val rawJson: String = Source.fromURL("https://mytest.com/api/sales.json").mkString
    val salesJson: JsValue = Json.parse(rawJson)
    val salesData: List[SalesData] = salesJson.as[List[SalesData]]

    def salesToJsValue(salesData: SalesData): JsValue = {
       Json.toJson(salesData)
     }
}
但是在分解时我如何给不同的字段命名呢

def salesToJsValue(salesData: SalesData): JValue = {
           Extraction.decompose(salesData)
         }

为了使用json4s创建自定义命名,您需要使用自定义格式

import org.json4s.{DefaultFormats, Extraction, FieldSerializer, Formats}
import org.json4s.FieldSerializer._
import org.json4s.native.Serialization.{read, write}

val rename = FieldSerializer[SalesData](
  renameTo("saleId", "id").orElse(renameTo("saleType", "type"))
)

implicit val format: Formats = DefaultFormats + rename


val result = Extraction.decompose(SalesData(1, "NEW"))