Scala Map - 从另一个键添加新的键和复制值

时间:2017-08-09 08:28:07

标签: scala maps

考虑如下2组数据:

JSON1=> {
         "data": [
                  {"id": "1-abc",
                    "model": "Agile",
                    "status":"open"
                     "configuration": {     
                         "state": "running",
                          "rootVolumeSize": "0.00000",
                          "count": "2",
                          "type": "large",
                          "platform": "Linux"
                                    }
                      "stateId":"123-567"
                   }
                  ]}
   JSON2=>{
         "data": [
                  {"id": "1-abc",
                    "model": "Agile", 
                     "configuration": {     
                         "state": "running",
                          "diskSize": "0",
                          "type": "small",
                          "platform":"Windows"
                                    }
                   }
                  ]}

我需要根据第一个字段id来比较JSON1和JSON2,如果它们匹配,我需要将JSON1与JSON 2合并,保留JSON2中的现有值(仅附加不存在的字段)。

我编码如下:

private def merger(JSON1: Seq[JSON], JSON2: Seq[JSON]):Seq[JSON] = {
  val abcKey = JSON1.groupBy(_.id) map { case (k, v) => (k, v.head) 
  val mergedRecords = for {
    xyzJSON<- JSON2
  } yield (
    abcKey.get(xyzJSON.id) match {
      case Some(JSON1) => xyzJSON.copy(status = JSON1.status, 
                                       stateId = JSON1.stateId)
      case None => xyzJSON.copy(origin = "N/A")
    }
  )

我无法找到协调configuration地图中字段的解决方案。 预期的结果集应该是:

         {
         "data": [
              {"id": "1-abc",
                "model": "Agile",
                "status":"open"
                 "configuration": {     
                     "state": "running",
                     "diskSize": "0",
                     "rootVolumeSize": "0.00000",
                     "count": "2",
                     "type": "small",
                     "platform": "Windows",
                                }
                  "stateId":"123-567"
               }
              ]}

0 个答案:

没有答案