Scala-将地图列表转换为地图

Scala-将地图列表转换为地图,scala,Scala,我需要处理一个JSON字符串,并以以下方式映射它: val jsonMap = mapper.readValue[Map[String, Object]](jsonString) MyjsonMap包含以下值: Map(k1 -> List(Map(k2 -> v2), Map(k3 -> v3)) newJsonMap所需的值为: Map(k1 -> Map(k2 -> v2)) 简而言之,我想将k1键的值从List转换为Map。我首先根据这个问题开始实施

我需要处理一个JSON字符串,并以以下方式映射它:

val jsonMap = mapper.readValue[Map[String, Object]](jsonString)
My
jsonMap
包含以下值:

Map(k1 -> List(Map(k2 -> v2), Map(k3 -> v3))
newJsonMap
所需的值为:

 Map(k1 -> Map(k2 -> v2))
简而言之,我想将
k1
键的值从
List
转换为
Map
。我首先根据这个问题开始实施:

但后来我意识到我处理的是不同的数据类型,在本例中,
Map[String,Object]
,这意味着我无法执行诸如使用scala内置的
flatte
方法对列表执行的操作

是否有任何方法可以将此映射转换为Scala映射,以便对JSON应用必要的转换?我该怎么做有什么想法吗


提前感谢。

简单的答案就是这样做

val jsonMap = mapper.readValue[Map[String, List[Map[String, String]]]](jsonString)
然后使用上一个问题的答案

如果你想用手来做这件事,像这样的方法应该可以:

val map: Map[String, Map[String, String]] =
  jsonMap.collect {
    case (k, v: List[_]) =>
      val list: List[Map[String, String]] =
        v.collect {
          case m: Map[_, _] =>
            m.collect {
              case (k: String, v: String) =>
                k -> v
            }
        }
      k -> list.headOption.getOrElse(Map.empty)
  }
这将忽略
对象
中非必需类型的任何元素。嵌套的
collect
表达式是必需的,因为类型擦除会阻止在一次操作中匹配嵌套类型


这是假设您希望
列表[Map]
位于
对象
内,但应该清楚如何将其更改为不同的转换。

您使用的是哪个json库?您必须使用该库,还是可以选择其他选项?输出的类型应该是什么?你能给我们举个例子吗?你确定要地图吗?您知道您正在解析的格式吗?如果知道,为什么不定义一些正确表示您的模型的case类并将您的json解析成这种格式呢?@LuisMiguelMejíaSuárez,首先感谢您的帮助。我正在使用jackson模块将JSON读入一个映射[字符串,对象]。主要目标是将json列表转换为json元素(即,将“[]”替换为“{}”)。示例:json={k1=[k2={…}]}到{k1={k2={…}}}。在这种特殊情况下,因为我只需要对预期的特定情况进行转换,所以我找到的解决方案适合这个问题。谢谢:)谢谢你的回答!虽然我没有用它,但是你的功能帮助我理解了这个问题!