2017-11-02 12 views
0

それは少し面倒に感じていると私はファンではないしかし、私はJson4sJson4s代替API

におけるjオブジェクトのうちフィールド
val x = (obj \ "Type").asInstanceOf[JString].values 

を取得するためのAPIのようなxp​​athがあります知っています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ある同上ので参照できることを期待しますtype memberすべてのJValuesにある値。彼はJValueのスナイパーです:

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

私はスケーラを初めて使っています。コンパイラを幸せにするにはどうすればいいですか?誰もが興味を持っている場合はここ

+0

は、 'JValue#Values'で試してみてくださいこちらをご覧insan-E JOBJECTその地図のために[文字列、任意]

ありがとう、です。 org/overviews/quasiquotes/type-details.html#type-projection –

+0

ありがとうございました –

答えて

0

は、ソリューションです:

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タイプの意志基礎となる値を指定する必要があります。します。https://docs.scala-langだから、JSTRINGのための文字列が