我使用了新的遊戲2.1-RC1框架,我有了一個選項[]字段的一類,像這樣:如何處理JSON解析可選字段中發揮2.1
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.json.Reads._
import play.api.libs.json.Writes._
import play.api.libs.json.Format._
import play.api.libs.functional.syntax._
case class Test(name: String, value: Option[String])
object Test {
implicit val testFormat = (
(__ \ "name").format[String] and
(__ \ "value").format[Option[String]]
)(Test.apply, unlift(Test.unapply))
def fromJson(js: String): Test = {
Json.fromJson[Test](Json.parse(js)).fold(
valid = { t => t},
invalid = { e => {
val missingField = (e(0)._1).toString.substring(1)
val badJs = js.trim
val newJs = badJs.substring(0, badJs.length()-1)+",\""+missingField+"\":null}"
fromJson(newJs)
}}
)
}
}
我希望能夠處理忽略可選「值」數據的JSON字符串,例如
val y = """{"name":"someone"}"""
(編輯問題) 我可以重寫JSON字符串(而笨拙地)作爲驗證步驟顯示,但 有一個簡單的模式,我可以用它來爲丟失的可選字段提供無?請注意,這種重寫不適用於嵌套結構,或者無法簡單追加缺失字段的地方。
唯一的問題是,json不是來自請求,而是來自websocket。 – NickStoughton
@NickStoughton'Iteratee.foreach [JsValue](event => Json.fromJson [Test](event))' – sndyuk
@NickStoughton JFYI https://github.com/playframework/Play20/blob/master/samples/scala/websocket -chat/app/models/ChatRoom.scala – sndyuk