2017-05-10 60 views
0

我JSON對象的列表形式如下:壓扁嵌套JSON對象的一個​​列表,斯卡拉

[{'a': JsonObj()}, {'b':JsonObj()}, .... ] 

如何扁平化列表到這種形式:

{'a': JsonObj(), 'b': JsonObj(), ...} 

注意各場有一個嵌套的JsonObj作爲它的值。我不想扁平化這些json對象。

我想將它追加到一個空的JsonObj但不起作用。

val rStreetsJsonObj: JsObject = Json.obj() 
for (routeS <- jsonList) { 
     rStreetsJsonObj.+(routeS) // Gives error: expected arguments should be of the form (String, jsValue) not JsObject 

} 

任何想法?

+0

你用什麼庫爲json?玩? –

+0

是的,我正在使用Play框架 – Geekster

+1

'list.foldLeft(Json.obj())(_ deepMerge _)' – cchantep

回答

1
list.foldLeft(Json.obj())(_ deepMerge _) 

這工作完美。

此答案來自@cchantep對原文的評論。

0

你可以有一個嘗試此解決方案:

首先:你需要轉換收到字符串實際JsArray

代碼可能:

val jsArray = Json.parse("[{\"a\": 1}, {\"b\":1}]").asInstanceOf[JsArray] 

請注意0​​方法,該方法返回一個JsValue類型,實際是Scala的特點,具體落實情況的類都繼承它,比如JsArray

:您可以迭代JsArray類型,但記住它有沒有直接支持foreach方法

但作爲一個案例類,你可以訪問它的value method

在一個字中,完全的解決方案,你可以嘗試一下:

object Test { 
    def main(args: Array[String]): Unit = { 
    val jsArray = Json.parse("[{\"a\": 1}, {\"b\":1}]").asInstanceOf[JsArray] 
    var rStreetsJsonObj: JsObject = Json.obj() 

    for (i <- jsArray.value) { 
     val tmpObject = i.asInstanceOf[JsObject] 
     rStreetsJsonObj = rStreetsJsonObj.++(tmpObject) 
    } 
    println(rStreetsJsonObj) 
    } 
} 

它將打印結果{"a":1,"b":1}