您的位置:首页 > Web前端 > JavaScript

yaml vs json

2016-06-05 11:49 906 查看

yaml vs json

我们知道yaml是json的超集,关于yaml和json的介绍我们可以看wiki yamlwiki json

yaml scala

yaml scala语言没太好用的wrapper,最终使用的java提供的snakeyaml

定义

由于将yml格式的文件转scala对象的时候需要符合JavaBean的规范,所以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: cjuexuan@sina.cn
|
""".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

现在我json最喜欢用的库在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" : "cjuexuan@sina.com"
|}
""".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":"cjuexuan@sina.com"}
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":"cjuexuan@sina.com"}
duration time :994000000}

Process finished with exit code 0


发现无论哪种方式下yaml的解析还是要快于json的,但使用bean对象的时候yaml的定义复杂于json,所以没啥明显性能问题的时候我还是倾向json
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala java 对象 javabean