首页 > 解决方案 > 在 Scala 中读取其键/值对和类型未知的 JSON

问题描述

如何迭代JSON对象without knowing key/value pairs及其类型Scala

标签: jsonscala

解决方案


您可以使用常规遍历方法,例如

import cats.syntax.either._
import io.circe._, io.circe.parser._

val json: String = """
  {
    "id": "c730433b-082c-4984-9d66-855c243266f0",
    "name": "Foo",
    "counts": [1, 2, 3],
    "values": {
      "bar": true,
      "baz": 100.001,
      "qux": ["a", "b"]
    }
  }
"""

val doc: Json = parse(json).getOrElse(Json.Null)

val baz: Decoder.Result[Json] =
  cursor.downField("values").downField("baz").as[Json]

解码为Json可让您在之后对其进行模式匹配。

baz.map({
  case JNull       => "Null"
  case JBoolean(_) => "Boolean"
  case JNumber(_)  => "Number"
  case JString(_)  => "String"
  case JArray(_)   => "Array"
  case JObject(_)  => "Object"
})

资料来源:https : //circe.github.io/circe/cursors.html、https ://circe.github.io/circe/api/io/circe/Json.html、https : //github.com/circe/ circe/blob/master/modules/core/shared/src/main/scala/io/circe/Json.scala#L95-L100


推荐阅读