scala 對象轉Json和Json轉對象的倆種方式

直接進入正題

import play.api.libs.functional.syntax._
import org.json4s.native.Serialization.read
import play.api.libs.functional.syntax.unlift
import play.api.libs.json.{JsPath, Json, Reads, Writes}

/**
  * Created by zmm on 2019/1/31
  */

case class FilterData(var id: Option[Int], publisherId: Int, subId: String, minPercentage: Byte, maxPercentage: Byte, var updateTime: Option[Int], status: Byte) {}

object JsonUtil {

  implicit val filterDataReads: Reads[FilterData] = (
    (JsPath \ "id").readNullable[Int] and
      (JsPath \ "publisher_id").read[Int] and
      (JsPath \ "sub_id").read[String] and
      (JsPath \ "min_percentage").read[Byte] and
      (JsPath \ "max_percentage").read[Byte] and
      (JsPath \ "update_time").readNullable[Int] and
      (JsPath \ "status").read[Byte]
    ) (FilterData.apply _)

  implicit val filterDataWrites: Writes[FilterData] = (
    (JsPath \ "id").writeNullable[Int] and
      (JsPath \ "publisher_id").write[Int] and
      (JsPath \ "sub_id").write[String] and
      (JsPath \ "min_percentage").write[Byte] and
      (JsPath \ "max_percentage").write[Byte] and
      (JsPath \ "update_time").writeNullable[Int] and
      (JsPath \ "status").write[Byte]
    ) (unlift(FilterData.unapply))

/**
* 這種方法速度更快
*/
  def jsonToRead(): Unit = {

    val adResponse = FilterData(
      id = Some(1001),
      publisherId = 10001,
      subId = "213123123",
      minPercentage = 10.toByte,
      maxPercentage = 100.toByte,
      updateTime = Some(1213321),
      status = 0.toByte
    )
    var a = 0
    val stratTime = System.currentTimeMillis()
    while (a < 1) {
      val json = Json.toJson(adResponse)(filterDataWrites)
      json.validate[FilterData](filterDataReads)
      a += 1
    }
    println(System.currentTimeMillis() - stratTime + ": ms")
  }
/**
* 這種方法開發更方便一點
*/
  def jsonToRead11(): Unit = {
    val adResponse = FilterData(
      id = Some(1001),
      publisherId = 10001,
      subId = "213123123",
      minPercentage = 10.toByte,
      maxPercentage = 100.toByte,
      updateTime = Some(1213321),
      status = 0.toByte
    )
    var a = 0
    import org.json4s.native.Serialization.write
    implicit val formats = org.json4s.DefaultFormats
    val stratTime = System.currentTimeMillis()
    while (a < 1) {
      read[FilterData](write(adResponse))
      a += 1
    }
    println(System.currentTimeMillis() - stratTime + ": ms")
  }

  def main(args: Array[String]): Unit = {
    jsonToRead()
    jsonToRead11()
  }
}

大家可以自己測試一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章