次のjsonペイロードを想定
val json = """{
"choices" : [
{
"name" : "A"
},
{
"name" : "B"
},
{
"name" : "C"
},
{
"name" : "D"
}
],
"domain" : "Quizz",
"level" : "Test",
"mandatory": true
}"""
どのように変換しますか
val json = """{
"value":"B",
"domain" : "Quizz",
"level" : "Test",
}"""
「B」は利用可能な選択肢からランダムに選択されますか?
これは私がこれまでに得たものです:
val cursor = parse(json).getOrElse(Json.Null).cursor
for{
noMandatory<- cursor.downField("mandatory").flatMap(_.delete).map(_.top)
withEmptyValue = noMandatory.deepMerge(Json.obj("value"->Json.Null))
}yield withEmptyValue
これにより、未使用の「必須」フィールドが削除され、空の「値」フィールドが挿入されます。ただし、配列からランダムな値を取得して「値」に配置すると、私は逃げます。
- 編集
上記をより明確にするhcursorを使用してみました(とにかく私にとって)
val cursor = parse(json).getOrElse(Json.Null).hcursor
val noMandatory = cursor.downField("mandatory").delete
val withEmptyValue = noMandatory.withFocus(_.deepMerge(Json.obj("value"->Json.Null)))
(上記の例では circe 0.5.1 を使用しています)