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)) }
}))
假设我有一个如下所示的 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)) }
}))