次の設定があるとします (便宜上 circe-literal を使用していますが、Json
値はどこからでも取得できます)。
import io.circe.Json, io.circe.literal._
val a1: Json = json"""[{"id": 1}, {"id": 2}, {"id": 3}]"""
val a2: Json = json"""[{"id": 4}, {"id": 5}, {"id": 6}]"""
これで、次のように組み合わせることができます。
for { a1s <- a1.asArray; a2s <- a2.asArray } yield Json.fromValues(a1s ++ a2s)
または:
import cats.std.option._, cats.syntax.cartesian._
(a1.asArray |@| a2.asArray).map(_ ++ _).map(Json.fromValues)
これらのアプローチはどちらも、 JSON 配列を表すか、または表さないかをOption[Json]
示します。たとえば、その状況で何が起こりたいか、または合理的な選択であるかを決定するのはあなた次第です。None
a1
a2
.getOrElse(a2)
.getOrElse(a1.deepMerge(a2))
補足として、現在の契約にdeepMerge
は次のように記載されています。
Null、Array、Boolean、String、および Number は値として扱われ、引数 JSON の値はこの JSON の値を完全に置き換えます。
deepMerge
ただし、これは決まったものではなく、 JSON 配列を連結することは不合理ではないかもしれません。