从json JsObject创建一个新映射

时间:2012-07-27 21:37:43

标签: scala

我有以下json字符串:

{"1342558874663000":{"TEMPERATURE_C":"253","TEMPERATURE_F":"775"},
"1342558854606000":{"TEMPERATURE_C":"254","TEMPERATURE_F":"776"}}

我想迭代此对象并使用以下格式创建一个新的json对象:

{"TEMPERATURE_C":[["1342558874663000","253"], ["1342558854606000","254"]],
"TEMPERATURE_F":[["1342558874663000", "775"], ["1342558854606000","776"]]}

我正在尝试执行以下操作,但无法弄清楚如何创建新地图:

json.fields.foreach {
        case (epoch, obj) => {
          val newVal = obj.as[JsObject].fields.map {
            case (temps, value) => {
              Map(temps -> (epoch, value.as[String])).toMap
            }
          }
          println(newVal)
        }
      }

1 个答案:

答案 0 :(得分:3)

这是一个相当简单的工作示例,可以生成您想要的输出:

import play.api.libs.json._

val json = Json.parse("""
  {"1342558874663000":{"TEMPERATURE_C":"253","TEMPERATURE_F":"775"},
  "1342558854606000" :{"TEMPERATURE_C":"254","TEMPERATURE_F":"776"}}
""").as[JsObject]

Json.toJson(json.fields.flatMap {
  case (epoch, obj) => obj.as[JsObject].fields.map(epoch -> _)
}.groupBy(_._2._1).mapValues(
  _.map { case (epoch, (_, v)) => Seq(epoch, v.as[String]) }
))

这里的技巧是将列表展平,然后重建你需要的结构。