Как игнорировать JsonNulls с помощью Circe Cursor - PullRequest
1 голос
/ 07 февраля 2020

Я обрабатываю json, в котором один из ключей values, values2 или values3 будет JsonObject, а два других - null.

Можно ли создать курсор таким образом, чтобы при попытке downField для значения json ноль получающийся курсор был неудачным?

Надеюсь, пример кода и закомментированная строка проясняют, чего я пытаюсь достичь здесь.

object Foo extends App {
  import io.circe._, io.circe.parser._
  val json: String = """
      {
        "id": "c730433b-082c-4984-9d66-855c243266f0",
        "values": {
          "bar": true,
          "baz": 100.001
        },
        "values2": null
      }
    """

  val doc: Json = parse(json).getOrElse(Json.Null)
  val rootCursor = doc.hcursor
  val result = for {
    name <- rootCursor.downField("id").as[String] 
    valuesCursor = rootCursor.downField("values")
    values2Cursor = rootCursor.downField("values2")
  } yield {
     if (values2Cursor.succeeded) { // I want this to be false when values2 -> JNull
       2
     } else {
       1
     }
  }
}

1 Ответ

2 голосов
/ 07 февраля 2020

Попробуйте dropNullValues вот так

...
parse(json).getOrElse(Json.Null).dropNullValues
...

который выводит result: scala.util.Either[io.circe.DecodingFailure,Int] = Right(1)

...