播放JSON读取组合器语法:访问原始JsValue?

时间:2016-04-25 16:19:47

标签: json scala playframework playframework-2.0

我正在使用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方法。

1 个答案:

答案 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))
    )
)(...)