我正在使用Play的Reads
组合器语法来读取相当庞大的JSON结构。除了一个字段外,这很有效:
implicit val reads: Reads[SomeEntity] = (
(__ \ "name").read[String] and
// a lot more to read, omitted...
... and
(__ \ "settings").read[Seq[Setting]](settingsReads(<name here>))
)(...)
正如您在上面所看到的,自定义Reads[Setting]
(此处:settingsReads
)需要json结构的name
字段 - 与第2行读取的名称相同。但是如何我可以访问它吗?它可以使用(JsValue \ "name").as[String]
手动完成,但因此需要使用“原始”JsValue
,而使用组合子语法则不然。还是我错了?有更简单的方法吗?
编辑: TL; DR:我想将实体的名称 -String传递给settingsReads方法。
答案 0 :(得分:4)
您的阅读[SomeEntity]:
implicit val reads: Reads[SomeEntity] = (
(__ \ "name").read[String] and
// a lot more to read, omitted...
... and
(__ \ "name").read[String].flatMap(name =>
(__ \ "settings").read[Seq[Setting]](settingsReads(name))
)
)(...)