我无法理解文档中的JsPath和Read的示例代码
https://www.playframework.com/documentation/2.2.1/ScalaJsonCombinators
import play.api.libs.json._
import play.api.libs.functional.syntax._
问题1 - 我们创建了一个自定义阅读器。读取应该能够读取由String,Float和List组成的数据结构。但是在下面的例子中,我们传递了一个Json!如何将Json转换为(String,Fload和List)?
问题2 - 我们使用JsPath \" key1"但是我们在哪里通过了JSON?
val customReads: Reads[(String, Float, List[String])] =
(JsPath \ "key1").read[String](email keepAnd minLength(5)) and
(JsPath \ "key2").read[Float](min(45)) and
(JsPath \ "key3").read[List[String]]
tupled
import play.api.libs.json.Json
val js = Json.obj(
"key1" -> "alpha",
"key2" -> 123.345F,
"key3" -> Json.arr("alpha", "beta")
)
res5: JsSuccess(("alpha", 123.345F, List("alpha", "beta")))
scala> customReads.reads(js)
customReads.reads(js).fold(
invalid = { errors => ... },
valid = { res =>
val (s, f, l): (String, Float, List[String]) = res
...
}
)
答案 0 :(得分:0)
问题1
我们创建了一个自定义阅读器。
是
读取应该能够读取由String,Float和List组成的数据结构。
没有
val customReads: Reads[(String, Float, List[String])]= ...
表示customReads
是Reads
类型的变量,而Reads.reads
必须返回类型(String, Float, List[String])
的元组
但是在下面的例子中,我们传递了一个JSON!如何将JSON转换为(String,Float和List)?
Reads.reads
是一个函数,它将JSON作为参数并返回一些值,通过定义的规则从JSON中提取。在我们的例子中,规则是:
(JsPath \ "key1").read[String](email keepAnd minLength(5))
和
(JsPath \ "key2").read[Float](min(45))
和强>
(JsPath \ "key3").read[List[String]]
所有这些值必须
tupled
所以我们的Reads.reads
函数返回(String, Float, List[String])
元组。
问题2
我们使用JsPath \" key1"但是我们在哪里通过了JSON?
JsPath \ "key1"
不是处理JSON的实际代码,它是处理JSON的规则。即它就像XPath表达式/key1