假设我有一个看起来像这样的json数组(我从远程服务接收它):
[{"id": 1}, {"id": 2}, ... , {"id": 10}]
而且,比方说,我希望改变'就像这样(将100添加到' id' s和其他值):
[{"id": 101}, {"id": 102}, ..., {"id": 110} ]
至于初学者,我想更新'这样它至少会用空白数组替换初始数组(只是为了测试它是如何工作的)。
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? 提前致谢
答案 0 :(得分:2)
请尝试以下代码
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)) }
}))