我有以下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)
}
}
答案 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]) }
))
这里的技巧是将列表展平,然后重建你需要的结构。