使用 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 注释