如何使用 Circe 游标忽略 JsonNulls
How to ignore JsonNulls with a Circe Cursor
我正在处理 json,其中键 values
、values2
或 values3
之一将是 JsonObject,另外两个将是 null
。
有什么方法可以创建游标,以便在 json 空值上尝试 downField
时,生成的游标是失败的?
希望代码示例和注释行能够清楚地说明我在这里想要实现的目标。
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
}
}
}
像这样尝试dropNullValues
...
parse(json).getOrElse(Json.Null).dropNullValues
...
输出result: scala.util.Either[io.circe.DecodingFailure,Int] = Right(1)
我正在处理 json,其中键 values
、values2
或 values3
之一将是 JsonObject,另外两个将是 null
。
有什么方法可以创建游标,以便在 json 空值上尝试 downField
时,生成的游标是失败的?
希望代码示例和注释行能够清楚地说明我在这里想要实现的目标。
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
}
}
}
像这样尝试dropNullValues
...
parse(json).getOrElse(Json.Null).dropNullValues
...
输出result: scala.util.Either[io.circe.DecodingFailure,Int] = Right(1)