我有这个示例网址: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类型。
答案 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)