2017-06-01 21 views
0

jsonからマップデータを抽出しようとしました。scala - play json JsValueジェネリック型への変換

def getMap[K, V](js: JsValue, key: String): Map[K, V] = { 
     js \ key match { 
      case JsDefined(v) => v.as[Map[K, V]] // error here 
      case _: JsUndefined => throw new Exception("Error") 
     } 
    } 

なしJSONデシリアライザタイプマップについて見出さ[K、V]。このタイプの暗黙読み取りまたは書式 を実装してください。 メソッドの引数が不十分です:(暗黙的なfjs:play.api.libs.json.Reads [Map [K、V]])Map [K、V]。 未指定の値パラメータfjs。 。私は地図(EX用の特定のタイプを定義するとき

この機能は動作します?、しかし、一般的な中で、私はそれをどのように行う必要がありません[]のInt地図[文字列、] v.as

答えて

1

をいくつかの時点で、あなたは、特定のKVを持っている必要がありますその時点で、あなたはそれまで、あなただけ暗黙的にそれらを渡すことができ、(暗黙の)範囲内の暗黙の読者が必要になります。

def getMap[K, V](js: JsValue, key: String)(implicit reads: Reads[Map[K,V]]): Map[K, V] = { 
     js \ key match { 
      case JsDefined(v) => v.as[Map[K, V]] // error here 
      case _: JsUndefined => throw new Exception("Error") 
     } 
    } 

なぜだろう、私はわかりませんこの方法で設定してください。どちらもしないでください

(js \ key).as[Map[K,V]] あなたはオプションが同様にOKであれば、それはエラーまたは (js \ key).asOpt[Map[K,V]] をスローする場合。または可能であれば (js \ key).validate[Map[K,V]]

+0

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

関連する問題