GitHub: https://github.com/json4s/json4sgit
// 默認隱式轉換 implicit val formats: Formats = DefaultFormats // 對象轉json val json = Serialization.write(F(112, "幺幺兒", None, Some("--"), BigDecimal(100d), Some(BigDecimal(23d)))) // {"id":112,"name":"幺幺兒","content":"--","money":100.0,"pay":23.0} // json轉對象 val r = Serialization.read[F]("{\"id\":112,\"name\":\"幺幺兒\",\"money\":55}")
針對特殊Beangithub
例如TEnum
做爲基礎枚舉類, 其餘枚舉繼承TEnum:json
class Sex private(val id: Int, val name: String) extends com.github.dapeng.core.enums.TEnum(id, name) {} object Sex { val MAN = new Sex(1, "男") val WOMAN = new Sex(2, "女") val UNDEFINED = new Sex(-1, "UNDEFINED") }
若是不自定義序列化和反序列化, 會致使 對象轉json 時出現重複的id和name, 因此就須要對這些特殊bean自定義序列化:scala
val TEnumSerializer = new CustomSerializer[TEnum](_ => ( { case JObject(JField("id", JInt(id)) :: JField("name", JString(name)) :: Nil) => new TEnum(id.toInt, name) }, { case e: TEnum => JObject(JField("id", JInt(BigInt(e.getId))) :: JField("name", JString(e.getName)) :: Nil) } )) implicit val formats: Formats = DefaultFormats + TEnumSerializer