使用 circe 过滤结果 JSON
Filter resulting JSON using circe
我有一个已转换的 JSON 对象,我需要将其过滤到仅其原始键的一个子集。我查看了 circe 中 Json
对象的文档,但它似乎没有公开任何 API 围绕过滤对象。我必须为此使用光标吗?我考虑过从案例 class 创建解码器,但是我的密钥中有一个特殊字符 .
。这里还有一些 code/data 的上下文。
{
"field.nested.this": "value",
"field.nested.that": "value",
"field.nested.where": "value"
}
创建不包含 field.nested.that
字段的新 JSON 实例的最佳方法是什么?
我不确定这是否是您需要的:
object Circe extends App {
import io.circe._
import io.circe.literal._
import io.circe.syntax._
//I'm using a json literal here.
//If you have a runtime string from an external source
// you would need to parse it with `io.circe.parser.parse` first
val json: Json = json"""
{
"field.nested.this": "value",
"field.nested.that": "value",
"field.nested.where": "value"
}
"""
val maybeJsonFiltered =
json.asObject.map(_.filterKeys(_ != "field.nested.that").asJson)
println(maybeJsonFiltered)
// Some({
// "field.nested.this" : "value",
// "field.nested.where" : "value"
// })
}
或者,您也可以将其解析为地图 (json.as[Map[String, String]]
) 或自定义案例 class,仅包含您需要的字段,并将它们编码回 json。您可能需要为所有带有 .
.
的字段添加 @JsonKey
注释
我有一个已转换的 JSON 对象,我需要将其过滤到仅其原始键的一个子集。我查看了 circe 中 Json
对象的文档,但它似乎没有公开任何 API 围绕过滤对象。我必须为此使用光标吗?我考虑过从案例 class 创建解码器,但是我的密钥中有一个特殊字符 .
。这里还有一些 code/data 的上下文。
{
"field.nested.this": "value",
"field.nested.that": "value",
"field.nested.where": "value"
}
创建不包含 field.nested.that
字段的新 JSON 实例的最佳方法是什么?
我不确定这是否是您需要的:
object Circe extends App {
import io.circe._
import io.circe.literal._
import io.circe.syntax._
//I'm using a json literal here.
//If you have a runtime string from an external source
// you would need to parse it with `io.circe.parser.parse` first
val json: Json = json"""
{
"field.nested.this": "value",
"field.nested.that": "value",
"field.nested.where": "value"
}
"""
val maybeJsonFiltered =
json.asObject.map(_.filterKeys(_ != "field.nested.that").asJson)
println(maybeJsonFiltered)
// Some({
// "field.nested.this" : "value",
// "field.nested.where" : "value"
// })
}
或者,您也可以将其解析为地图 (json.as[Map[String, String]]
) 或自定义案例 class,仅包含您需要的字段,并将它们编码回 json。您可能需要为所有带有 .
.
@JsonKey
注释