首页 > 解决方案 > 如何使用 json4s 解析 json 以便让原始值成为自定义案例类?

问题描述

我想使用案例类来替换 json4s 中的原始类型,因为我想将业务方法放在这些案例类中。

例如:

import org.json4s.{CustomSerializer, DefaultFormats, NoTypeHints}
import org.json4s.JsonAST.{JField, JInt, JObject}
import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization.read

object Json4sExercise {

  trait ObjectHolder[T] {
  }

  case class IntValue(v: Int) extends ObjectHolder[Int]

  case class StringValue(v: String) extends ObjectHolder[String]

  class IntSerializer extends CustomSerializer[IntValue](format => ( {
    case JInt(x) => IntValue(x.toInt)
  }, {
    case IntValue(x) => JInt(BigInt(x))
  }
  ))

  implicit val formats =  Serialization.formats(NoTypeHints) + new IntSerializer

  def main(args: Array[String]): Unit = {
    println(read[Map[String, _]](""" {"price":350} """))
  }

}

但不是我想要的:Map(price -> IntValue(x:350)),它打印 Map(price -> 350)

标签: scalajson4s

解决方案


您需要具体说明您要阅读的类型

println(read[Map[String, IntValue]](""" {"price":350} """))
Map(price -> IntValue(350))

推荐阅读