Json 无法理解文档中的Read[T]JsPath示例
我无法理解JsPath的示例代码,也无法阅读文档 问题1-我们创建了一个自定义阅读器。Reads应该能够读取由字符串、浮点和列表组成的数据结构。但在下面的示例中,我们将传递一个Json!Json是如何转换为(字符串、Fload和列表)的 问题2-我们使用JsPath \“key1”,但我们在哪里传递了JSONJson 无法理解文档中的Read[T]JsPath示例,json,playframework,Json,Playframework,我无法理解JsPath的示例代码,也无法阅读文档 问题1-我们创建了一个自定义阅读器。Reads应该能够读取由字符串、浮点和列表组成的数据结构。但在下面的示例中,我们将传递一个Json!Json是如何转换为(字符串、Fload和列表)的 问题2-我们使用JsPath \“key1”,但我们在哪里传递了JSON val customReads: Reads[(String, Float, List[String])] = (JsPath \ "key1").read[String](ema
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
...
}
)
问题1 我们创建了一个自定义阅读器 对 Reads应该能够读取由字符串、浮点和列表组成的数据结构 没有 表示
customReads
是Reads
类型的变量,并且Reads.Reads
必须返回类型的元组(字符串、浮点、列表[字符串])
但在下面的示例中,我们将传递一个JSON!JSON如何转换为(字符串、浮点和列表)
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])
元组
问题2
(JsPath \ "key2").read[Float](min(45))
我们使用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
...
}
)
JsPath\“key1”
不是处理JSON的实际代码,而是处理JSON的规则。i、 这就像XPath表达式/key1
您的解释很有道理。后续问题-在哪里覆盖“读取”?scala文档将“reads”声明为抽象def reads(json:JsValue):JsResult[A]
。我猜is必须与apply方法有关,但是我无法连接点。里面的代码很复杂,就像从函数中创建函数并更改函数一样。因此(JsPath\“key1”)。读取[String]
创建一些函数,然后和
创建另一个与下一个(JsPath\“key2”)组合的函数。读取[String]
,依此类推,使用reads
函数创建Read
对象,该函数是根据前面的组合定义的