2016-04-13 12 views
0

私は、来るべきjsonでtim値に最もよくエレガントな方法を理解しようとしています。playframework - json値をトリムする最も良い方法

だから、例えば私は、次のJSONを持っている:以下の定義では

{ 
    "firstName": " foo", 
    "lastName": "bar " 
} 

case class Someone(firstName:String, lastName: String) 
object Someone{ 
    implicit val someoneReads: Reads[Someone] = (
     (JsPath \ "firstName").read[String] and 
     (JsPath \ "lastName").read[String] 
    )(Someone.apply _) 
} 

はそれを読みながらJSONをトリミングする方法はありますか?または私はそれのための変圧器を書く必要がありますか?私が行うなら、それを書く方法は私が提供するすべてのjsonを旅行するために一般的になるでしょうか?

ありがとうございます!

答えて

1

使用map(_.trim)read[String]のためのトリム文字列(ユニバーサルソリューション)

implicit val someoneReads: Reads[Someone] = (
    (JsPath \ "firstName").read[String].map(_.trim) and 
     (JsPath \ "lastName").read[String].map(_.trim) 
    )(Someone.apply _) 

のためにあなたは自分実装することができます[文字列]を読み込み、トリミングされた文字列とコードのより身近なビューのためにも

def trimmedString(path: JsPath): Reads[String] = Reads.at[String](path).map(_.trim) 

implicit val someoneReads: Reads[Someone] = (
    trimmedString(JsPath \ "firstName") and trimmedString(JsPath \ "lastName")  
)(Someone.apply _) 

あなたかもしれません暗黙の変換を実装する

import scala.language.implicitConversions 

class JsPathHelper(val path: JsPath) { 
    def trimmedString: Reads[String] = Reads.at[String](path).map(_.trim) 
} 
implicit def toJsPathHelper(path: JsPath): JsPathHelper = new JsPathHelper(path) 

implicit val someoneReads: Reads[Someone] = (
    (JsPath \ "firstName").trimmedString and 
    (JsPath \ "lastName").trimmedString 
)(Someone.apply _) 
+1

ありがとう!これは私の現在の解決策ですが、もっと一般的な解決策を探していました。私は多くの読書を持っています。私は全員からこれを解決し、すべての行にこのマッピングを追加しません。少なくともこれは私が達成したいことです。 – Tomer

関連する問題