yaml vs json

8658 단어 scala
yaml vs json
우 리 는 Yml 가 json 의 초 집합 이라는 것 을 알 고 있 습 니 다.Yml 와 json 에 대한 소 개 는 위 키 Yml 와 위 키 제 이 슨 을 볼 수 있 습 니 다.
yaml scala
Yml scala 언어 가 잘 사용 되 지 않 는 wrapper,최종 적 으로 사용 하 는 자바 가 제공 하 는 snakeyaml
정의.
yml 형식의 파일 을 scala 대상 으로 바 꿀 때 자바 빈 의 규범 에 부합 해 야 하기 때문에 scala 의 대상 은 추 하 게 정의 되 었 습 니 다.마지막 으로 이 렇 습 니 다.
package com.ximalaya.sparkcommon.model

import scala.beans.BeanProperty
/**
  * Created by todd.chen on 6/4/16.
  * email : todd.chen@ximalaya.com
  */
class EmailConfigYaml {
  @BeanProperty var host: String = _
  @BeanProperty var username: String = _
  @BeanProperty var password: String = _
  @BeanProperty var auth: Boolean = _
  @BeanProperty var fromEmail: String = _
  override def toString = s"EmailConfig($host,$username,$password,$auth,$fromEmail)"
}

읽 기와 쓰기:
  def getEmailConfigYaml = {
    val source =
      """
        |--- !!com.ximalaya.sparkcommon.model.EmailConfigYaml
        |host : smtp.sina.cn
        |username : cjuexuan
        |password : password
        |auth : true
        |fromEmail: [email protected]
        |
      """.stripMargin
    val yml = new Yaml()
    val email = yml.load(source).asInstanceOf[EmailConfigYaml]
    println(s"yaml2email:$email")
    val emailString = yml.dump(email)
    println(s"email2yaml:$emailString")
  }

json scala
현재 제 이 슨 이 가장 좋아 하 는 라 이브 러 리 는 scala 에서 play-jso 정의 와 읽 기와 쓰기 도 상당히 간단 합 니 다.간단하게 넘 어가 보 겠 습 니 다.
정의.
package com.ximalaya.sparkcommon.model

import play.api.libs.json.Json
/**
  * Created by todd.chen on 6/4/16.
  * email : todd.chen@ximalaya.com
  */
case class EmailConfigJson(
                          host:String,
                          username:String,
                          password:String,
                          auth:String,
                          fromEmail:String
                          )
object EmailConfigJson{
  val format = Json.format[EmailConfigJson]
}

읽 기와 쓰기
  def getEmailConfigJson = {
    val source =
      """
        |{
        | "host" : "smtp.sina.cn",
        | "username" : "cjuexuan",
        | "password" : "password",
        | "auth" : "true",
        | "fromEmail" : "[email protected]"
        |}
      """.stripMargin
    val json = Json.parse(source)
    implicit val format = EmailConfigJson.format
    val email = json.as[EmailConfigJson]
    println(s"json2email:$email")
    val emailString = Json.toJson(email)
    println(s"email2json:$emailString")
  }

읽 기 쓰기 테스트 용례

  def test(func: ⇒ Unit) = {
    val start = Instant.now()
    func
    val end = Instant.now()
    val duration = Duration.between(start, end)
    println(s"duration time :${duration.toNanos}}")
  }

  def main(args: Array[String]): Unit = {
    test(getEmailConfigYaml)
    test(getEmailConfigJson)
  }

결과 와 결론
json2email:EmailConfigJson(smtp.sina.cn,cjuexuan,password,true,cjuexuan@sina.com)
email2json:{"host":"smtp.sina.cn","username":"cjuexuan","password":"password","auth":"true","fromEmail":"[email protected]"}
duration time :1586000000}
yaml2email:EmailConfig(smtp.sina.cn,cjuexuan,password,true,cjuexuan@sina.cn)
email2yaml:!!com.ximalaya.sparkcommon.model.EmailConfigYaml {auth: true, fromEmail: cjuexuan@sina.cn,
  host: smtp.sina.cn, password: password, username: cjuexuan}

duration time :253000000}

Process finished with exit code 0

순 서 를 바 꾸 어 테스트 하 다.
yaml2email:EmailConfig(smtp.sina.cn,cjuexuan,password,true,cjuexuan@sina.cn)
email2yaml:!!com.ximalaya.sparkcommon.model.EmailConfigYaml {auth: true, fromEmail: cjuexuan@sina.cn,
  host: smtp.sina.cn, password: password, username: cjuexuan}

duration time :676000000}
json2email:EmailConfigJson(smtp.sina.cn,cjuexuan,password,true,cjuexuan@sina.com)
email2json:{"host":"smtp.sina.cn","username":"cjuexuan","password":"password","auth":"true","fromEmail":"[email protected]"}
duration time :994000000}

Process finished with exit code 0

어떤 방식 으로 든 Yml 의 해석 은 json 보다 빠 르 지만 bean 대상 을 사용 할 때 Yml 의 정 의 는 json 보다 복잡 하기 때문에 뚜렷 한 성능 문제 가 없 을 때 저 는 json 을 선 호 합 니 다.

좋은 웹페이지 즐겨찾기