如何在 Scala 中展平深度嵌套的地图,以点表示法返回具有相关嵌套键的新地图?
背景:我正在尝试为uJson.Obj
s 这样做,但由于它们只是mutable.LinkedHashMap[String, Value]
底层,标准库地图的答案也应该有所帮助。
例如:
val original = Obj("Simple" -> "a",
"nested" ->
Obj("c1" ->
Obj("c2" -> "a")))
flattenObj(original) shouldEqual Obj("simple" -> "a", "nested.c1.c2" -> "a")
我已经尝试了以下(基于this answer),但它仅适用于第一级,并且仍然不处理以点表示法命名新键:
def flattenObj(o: Obj, delimiter: String = "."): Obj = {
o.obj.flatMap {
case (key, map: Obj) => map.obj
case (key, value) => Map(key -> value)
}
}
结果是:
Actual: {"Simple":"a","c1":{"c2":"a"}}
但是,我希望:
Expected: {"simple":"a","nested.c1.c2":"a"}
谢谢你们。