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 に答える