scala - 如何使用 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)
解决方案
您需要具体说明您要阅读的类型
println(read[Map[String, IntValue]](""" {"price":350} """))
Map(price -> IntValue(350))
推荐阅读
- javascript - 组件的无限调用
- javascript - 使用 fullpage.js 时无法在我的 html 文件中定位元素
- angular - 如何使用 Angular 组件嵌入投影自定义中间内容?
- integer - double eg -189.125 如何以十六进制表示?
- kotlin - Kotlin Recycleview ,如何制作 onItem 点击查看
- python - 将多个文件的列合并为一个 - Python
- sass - 通过使用 @use 导入单个文件一次导入多个文件(使用命名空间)
- c# - 使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机选择
- c# - Linq 错误:无法翻译平均值
- python - Jython 从不同路径导入类