2014-02-25 18 views
1

我在下面的Mongo中存儲了一個Json對象。它是'扁平'的,即沒有嵌套元素:將JsArray解析爲case類,而不通過引用Json鍵來詳細描述

{ 
    "key1" : "val1", 
    "key2" : "val2", 
    .... 
    "keyn" : "valn" 

} 

我已經將它作爲JsArray獲取。我也有一個案例分類:

case class IndividualProduct(key1: String, key2: String, ... , key_n: String) {} 

總共Json將有超過40個鍵/值對。是否有一種簡潔的方式將JsArray解析爲案例類,而不用引用密鑰?

在此先感謝 - 未來[感謝]

+0

等等,像JsArray?由於這不是一個數組,它會失敗。只需將其作爲JsObject取而代之。 –

+0

我不明確的道歉。 Json如上所述,但是我已經設法使用ReactiveMongo插件將它作爲JsArray獲得。 – sectornitad

+0

然後轉到JsObject,有什麼問題?也許你應該發佈那部分內容,因爲目前沒有任何意義。 –

回答

1
import play.api.libs.json._ 
implicit val reader = Json.reads[IndividualProduct] 
val ip = Json.fromJson[IndividualProduct](fetchedJsObj) 
+0

謝謝,是我抓的JsObj JsArray嗎?那麼這位讀者是否會創建所有字段的案例類? – sectornitad

+0

這就是你應該擁有的JsObject。 'Json.reads'是一個從您的案例類創建讀者的宏。有關更多信息,請參閱官方文檔,他們會解釋所有這些內容。 –

0

這不是一個JsArray,而是Map[String, String]。 所以,如果你有一個像一個你呈現一個JSON,這裏是可以工作:

val json = getYourJsonFromDB() 
val kv = json.as[Map[String, String]] 

現在,你就可以做這樣的事情:

val valueForKey13 = kv.get("key13") //returns an Option[String] 

希望這有助於

+0

謝謝你。我通過ReactiveMongo作爲JsArray返回它... – sectornitad