我有一个以这种形式的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 :(得分:1)
list.foldLeft(Json.obj())(_ deepMerge _)
这很有效。
这个答案来自@cchantep对原帖的评论。
答案 1 :(得分:0)
您可以尝试使用此解决方案:
首先:您需要将收到的字符串转换为实际 JsArray
代码可能是:val jsArray = Json.parse("[{\"a\": 1}, {\"b\":1}]").asInstanceOf[JsArray]
注意返回JsValue类型的parse
方法,实际上它是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}