2012-06-25 87 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