Martin Odersky手写的scala json parser

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))
}

猜你喜欢

转载自blog.csdn.net/onwingsofsong/article/details/82532394