JSON解析与播放:为什么是这样解析列表?
问题描述:
这里是一个JSON列表我要处理:JSON解析与播放:为什么是这样解析列表?
scala> jsonStructure \ "response" \ "docs"
res4: play.api.libs.json.JsValue = [{"title":"the very first document"},{"title":"on brick walls"}]
我试图将其转换为一个列表,但我得到不同的语义的东西,一个列表,它的唯一元素是列表:
scala> jsonStructure \ "response" \\ "docs"
res3: Seq[play.api.libs.json.JsValue] = List([{"title":"the very first document"},{"title":"on brick walls"}])
scala> res3.size
res4: Int = 1
我想这杂牌,这是卓有成效的:
scala> (jsonStructure \ "response" \ "docs").as[Seq[play.api.libs.json.JsValue]]
res9: Seq[play.api.libs.json.JsValue] = List({"title":"the very first document"}, {"title":"on brick walls"})
scala> res9 size
res10: Int = 2
为什么d ID \\
不工作?将JsValue理解为JsArray的习惯用法是什么?虽然仍然保持“导航使用和从未失败”的哲学?我想分析更深的结构,比如obj中的obj列表,它是一个列表元素;我想要一种不会因深度嵌套结构而变得笨重的方法。
随意,如果你发现它的复杂改正我的做法,脆等
答
如果你想只是标题的项目列表,你可能会想要写的东西,如:
json \\ "title"
哪返回:
List("the very first document", "on brick walls")
的\\
作品,列出你的路径选择匹配的任何元素(在目前的水平,所有的后代)。由于基本上有一个docs
元素,它将返回一个包含一个元素的列表。只有当您要求标题时,才会返回标题列表。
但是从你接近,你可能想在JsArray到图案匹配JsValue:
def convert(json : JsValue) : Option[Seq[JsValue]] = json match {
case JsArray(arr) => Some(arr)
case _ => None
}
它返回你想要什么:
List({"title":"the very first document"}, {"title":"on brick walls"})