3

我有以下 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)
        }
      }
4

1 回答 1

4

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

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]) }
))

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

于 2012-07-27T22:18:11.887 回答