2016-01-20 29 views
3

我有一對夫婦在我的API模型Boolean屬性,並願意接受true/false以及1/0值。我的第一個想法是實現自定義格式:如何實現噴霧JSON用於布爾類型的自定義解串器

object UserJsonProtocol extends DefaultJsonProtocol { 

    implicit object MyBooleanJsonFormat extends JsonFormat[Boolean] { 
     def write(value: Boolean): JsString = { 
      return JsString(value.toString) 
     } 

     def read(value: JsValue) = { 
      value match { 
       case JsString("1") => true 
       case JsString("0") => false 
       case JsString("true") => true 
       case JsString("false") => false 
       case _ => throw new DeserializationException("Not a boolean") 
      } 
     } 
    } 

    implicit val userFormat = jsonFormat15(User.apply) 
} 

其中UserBoolean屬性的模型。不幸的是上面的解決方案沒有影響 - 1/0不被接受爲布爾值。任何解決方案

回答

1

與類型和模式修復了一些問題後匹配似乎工作:

implicit object MyBooleanJsonFormat extends JsonFormat[Boolean] { 
    def write(value: Boolean): JsBoolean = { 
     return JsBoolean(value) 
    } 

    def read(value: JsValue) = { 
     value match { 
      case JsNumber(n) if n == 1 => true 
      case JsNumber(n) if n == 0 => false 
      case JsBoolean(true) => true 
      case JsBoolean(false) => false 
      case _ => throw new DeserializationException("Not a boolean") 
     } 
    } 
}