2017-06-01 50 views
0

我試圖從json中提取地圖數據。scala - 玩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。

此功能時,我定義特定類型的地圖(如:?v.as [地圖[字符串,INT]],而不是在通用我應該如何用它做

回答

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]] 如果你想要它拋出一個錯誤或 (js \ key).asOpt[Map[K,V]] 如果一個選項也是好的。或者,也可以 (js \ key).validate[Map[K,V]]

+0

謝謝,你救了我:) –