Scala:将Json JObject转换为List

时间:2015-05-27 14:51:10

标签: scala json4s

我有这个示例网址:https://api.github.com/repos/jdan/isomer/languages 这里输出的差异在于它通常不是我们对JSON的期望,即“标签”:“价值”。它是“Language_Name”:“行数”。

当我从我的scala代码中调用此api时:

val responseLangUrl: HttpResponse[String] = Http(url").asString
val responseLangUrlJson = parse(responseLangUrl.body)
println(responseLangUrlJson)

输出是:

JObject(List((Ruby,JInt(2622))))
JObject(List((CoffeeScript,JInt(3513)), (JavaScript,JInt(380))))

JInt对我来说微不足道。我想要所有这些语言名称的列表。我怎样才能提取出来?

https://github.com/json4s/json4s:这个官方链接有“标签”的例子:“值”的情况,但我如何提取这样的东西,即我直接拥有信息的JSON类型。

2 个答案:

答案 0 :(得分:3)

import org.json4s._
import org.json4s.jackson.JsonMethods._

implicit val formats = DefaultFormats

parse("""
 {
   "JavaScript": 54179,
   "CSS": 508,
   "HTML": 406
}
""").foldField(List(): List[String])((l, t) => t._1 :: l)

结果

res0: List[String] = List(HTML, CSS, JavaScript)

答案 1 :(得分:1)

IMO最简单的方法是将JSON转换为Map[String, Any]然后提取密钥。

parse("""
 {
   "JavaScript": 54179,
   "CSS": 508,
   "HTML": 406
}
""").extract[Map[String, Any]].map(_._1)
res0: scala.collection.immutable.Iterable[String] = List(JavaScript, CSS, HTML)