Scala Play 框架 'update' json 数组

Scala Play framework 'update' json array

假设我有一个如下所示的 json 数组(我从远程服务接收它):

[{"id": 1}, {"id": 2}, ... , {"id": 10}]

而且,比如说,我想 'transform' 像这样(将 100 添加到“id”和其他值):

[{"id": 101}, {"id": 102}, ..., {"id": 110} ]

至于初学者,我想 'update' 它至少会用空白数组替换初始数组(只是为了测试东西是如何工作的)。

Json.parse("""[{"id": 1}, {"id": 2}]""").transform( (__).json.update( __.read[JsArray].map(_ => JsArray()) ))

但抛出异常:

play.api.libs.json.JsResult[play.api.libs.json.JsObject] = JsError(List((,List(ValidationError(List(error.expected.jsobject),WrappedArray())))))

然而,如果它们被密封在一个 json 对象中,那么它就可以工作了:

Json.parse("""{"ids": [{"id": 1}, {"id": 2}]}""").transform( (__ \ "ids").json.update( __.read[JsArray].map(_ => JsArray()) ))

这导致

play.api.libs.json.JsResult[play.api.libs.json.JsObject] = JsSuccess({"ids":[]},/ids)

如何处理数组json? 提前致谢

试试下面的代码,

case class ID(id: Int)
implicit val reads = Json.reads[ID]

Json.parse("""[{"id": 1}, {"id": 2}]""").as[JsArray].value.map(_.transform(__.json.update {
  __.read[ID].map { case x: ID => Json.obj("id" -> (x.id + 100)) }
}))