Json4s 替代 api,带有 scala 泛型/类型成员



我知道有一个像 api 这样的 xpath 可以从 Json4s 中的 JObject 中获取字段

val x = (obj  "Type").asInstanceOf[JString].values

但是感觉有点麻烦,而且我不喜欢像 apis 这样的符号。我有点想要这样的东西:

implicit class JsonExtensions(json: JObject) {
  def get[T <: JValue](key: String) : T.Values = {
     (json  key).asInstanceOf[T].values
  }
}

并像这样使用它

val x  = obj.get[String]("type")

但是它不编译,T 的上限是一个 JValue,所以 Id 希望能够引用所有 JValue 上的类型成员 Values。作为参考,他是JValue的狙击手:

sealed abstract class JValue extends Diff.Diffable with Product with Serializable {
    type Values
    def values: Values
...
}

我是 scala 的新手,如何让编译器满意?

如果有人感兴趣,这是解决方案:

implicit class JsonExtensions(json: JValue) {
  def get[T <: JValue](key: String) : T#Values = {
    (json  key).asInstanceOf[T].values
  }
}
val x = obj.get[JString]("type")

您必须指定预期类型,但 x 将指定 Json Ast 类型的基础值。所以对于JString是一个字符串,对于JObject来说它是一个Map[String,Any]

谢谢仁山娥

相关内容

  • 没有找到相关文章

最新更新