这是一个基于提取器的解决方案,它将进行类转换:
class CC[T] { def unapply(a:Any):Option[T] = Some(a.asInstanceOf[T]) }object M extends CC[Map[String, Any]]object L extends CC[List[Any]]object S extends CC[String]object D extends CC[Double]object B extends CC[Boolean]val jsonString = """ { "languages": [{ "name": "English", "is_active": true, "completeness": 2.5 }, { "name": "Latin", "is_active": false, "completeness": 0.9 }] } """.stripMarginval result = for { Some(M(map)) <- List(JSON.parseFull(jsonString)) L(languages) = map("languages") M(language) <- languages S(name) = language("name") B(active) = language("is_active") D(completeness) = language("completeness")} yield { (name, active, completeness)}assert( result == List(("English",true,2.5), ("Latin",false,0.9)))
在for循环的开始,我人为地将结果包装在一个列表中,以便在最后生成一个列表。然后在for循环的其余部分中,我将使用生成器(使用
<-)和值定义(使用
=)将利用unapply方法的事实。
(较旧的答案已被删除-如果您有好奇心,请查看编辑历史记录)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)