JSON. , update .
val transformer = (__ \ "viewedTaskIds").json.update(
__.read[JsArray].map(_.append(JsNumber(5)))
)
, . update Reads[A <: JsValue] . JsArray, map JsNumber(5) .
, , JsValue:
val js = Json.parse("""{
"foo": "bar",
"viewedTaskIds": [1, 2, 3, 4]
}""")
scala> js.transform(transformer)
res6: play.api.libs.json.JsResult[play.api.libs.json.JsObject] = JsSuccess({"foo":"bar","viewedTaskIds":[1,2,3,4,5]},/viewedTaskIds)
, , , orElse Reads.pure(JsArray()), , .
val transformer = (__ \ "viewedTaskIds").json.update(
__.read[JsArray].orElse(Reads.pure(JsArray())).map(_.append(JsNumber(5)))
)
, , . orElse , . - . , , :
val fallback = __.json.update((__ \ "viewedTaskIds").json.put(JsArray(Seq(JsNumber(5)))))
scala> js.transform(transformer).orElse(js.transform(fallback))
res19: play.api.libs.json.JsResult[play.api.libs.json.JsObject] = JsSuccess({"foo":"bar","viewedTaskIds":[5]},)