2012-06-25 109 views
0

將json轉換爲其他類型應該很簡單。從玩! documentationPlayFramework 2.0 Json to List [String] Conversion

var str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}" 
var fol = Json.parse(str) 
var fin = Json.fromJson[List[String]].fromJson(fol) 

應該沒問題。它編譯罰款,但與此錯誤失敗:

[RuntimeException: List expected] 

取而代之的是,這個工程:

var str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}" 
var fol = Json.parse(str) 
var fin = (fol \ "ids") match { 
    case ids: JsArray => ids.value.map(_.toString) 
    case _ => JsArray() 
} 

爲什麼?我是否理解API的錯誤?我在PlayFramework 2.0.1中嘗試了這個。

回答

1

你不能直接解析它爲List[String],因爲它是一個數字列表,而不是字符串。你的匹配例子的工作原理是因爲你之後將id映射到一個字符串。使用你的榜樣,你會寫它更像是:

val str = "{\"next_cursor\":0,\"ids\":[123123,345345],\"previous_cursor\":0}" 
val fol = Json.parse(str) 
val fin = Json.fromJson[List[Int]](fol \ "ids") 

爲了使語法稍微容易閱讀,我會利用JsValue.as[T],這是Json.fromJson[T]等價的:

val fin = (fol \ "ids").as[List[Int]] 

如果您需要將ID轉換爲字符串:

val fin = (fol \ "ids").as[List[Int]].map(_.toString) 
+0

從來沒有想過這麼簡單。這個作品非常非常感謝你。 – bertzzie