假设我有下一个案例类:
case class Person(id: String, money: BigDecimal)
object Person {
implicit val encoder: Encoder[Person] = Encoder.forProduct2("ID", "Money")(u =>
(u.id, u.money))
我想将Person类的实例序列化为JSON,所以当我从circe评估asJson
时,我得到科学记数法的结果:
{
"ID" : "123",
"VALOR_SAP" : 2.7E+7
}
为什么会这样?我认为原因是因为BigDecimal
字符串的默认值会自动格式化为科学记数法。
我该怎么做才能避免这种情况?可能会创建另一种类型,该类型从BigDecimal
延伸并覆盖toString
?
答案 0 :(得分:3)
我假设您使用scala.math.BigDecimal
,因为java.math.BigDecimal
代码类似。更改对象序列化方式的方法是提供相应的隐式Encoder
对象。遗憾的是,Json
和JsonNumber
层次结构都是密封的,因此没有非常简洁的解决方案,但您仍然可以使用实现JsonNumber.fromDecimalStringUnsafe
的{{1}}来返回您传入的任何字符串。所以你可以这样做:
toString