Martin Odersky手寫的scala json parser
阿新 • • 發佈:2018-10-31
import scala.collection.immutable trait JSON case class JSeq(elems:List[JSON]) extends JSON case class JObj(bingdings:Map[String,JSON]) extends JSON case class JNum(num:Double) extends JSON case class JStr(str:String) extends JSON case class JBool(b:Boolean) extends JSON case object JNull extends JSON object JsonParser extends App{ val data=JObj(Map( "firstName"->JStr("John"), "lastname"->JStr("Smith"), "address"->JObj( Map( "streetAdress"->JStr("21 st"), "state"->JStr("NY"), "postCode"->JNum(123456) )), "phoneNumbers"->JSeq(List( JObj( Map( "type"->JStr("home"), "numbers"->JStr("021-2132131") )), JObj( Map( "type"->JStr("fax"), "numbers"->JStr("0121-2132131") )) )) )) def show(json:JSON):String=json match { case JSeq(elems)=> "["+(elems map show mkString ",")+"]" case JObj(bingdings)=> val assocs: immutable.Iterable[String] =bingdings map{ case (key,value)=>"\"" + key + "\": " + show(value) } "{"+(assocs mkString ", ")+"}" case JNum(num)=>num.toString case JStr(str)=>'\"'+str+'\"' case JBool(b)=> b.toString case JNull=>"null" } println(show(data)) }