2012-07-27 83 views
1

我有以下的JSON字符串:創建從JSON JsObject新地圖

{"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

這是一個合理的s traightforward工作示例產生你想要的輸出:

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

這裏的竅門就是擊敗列表中,然後重建您需要的結構。

+0

這真是太神奇了,我需要弄清楚它是如何在我身上發揮作用的,但謝謝! – chiappone 2012-07-27 22:27:59