播放 JSON 读取组合器语法:访问原始 JsValue?
Play JSON Reads Combinator Syntax: access raw JsValue?
我正在使用 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]
手动完成,但因此需要 "raw" JsValue
,而使用组合器语法时则不是这种情况。还是我错了?有没有更简单的方法?
编辑: 长话短说:我想将实体的 name-String 传递给 settingsReads 方法。
您的阅读[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))
)
)(...)
我正在使用 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]
手动完成,但因此需要 "raw" JsValue
,而使用组合器语法时则不是这种情况。还是我错了?有没有更简单的方法?
编辑: 长话短说:我想将实体的 name-String 传递给 settingsReads 方法。
您的阅读[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))
)
)(...)