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

标签 json scala json4s

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

以下是我如何使用 Play 框架做到这一点:

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"))

https://github.com/json4s/json4s#serializing-fields-of-a-class

关于json - scala - 使用 json4s 分解时如何更改字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709718/

相关文章:

scala - 当我在 Intellij 14 中为 scala 项目运行 "make project"时,jar 在哪里?

scala - 如何命名聚合列?

java - Scala中获取Json头节点值

java - 提供 JSON 和 XML 格式的 GET 方法

json - 将 Node 脚本链接在一起并在多个文件上使用 Node 脚本

C++将json转为对象

ios - 解析 View Controller 之间的 JSON 数据

scala - 编译失败 : error while loading AnnotatedElement, Scala 2.10 下 Java 8 的 ConcurrentMap、CharSequence?

scala - 使用可变键转换 Json

java - JodaTime 序列化问题