【问题标题】:Scala: Convert Json JObject to ListScala:将 Json JObject 转换为列表
【发布时间】:2015-05-27 14:51:09
【问题描述】:

我有这个示例网址:https://api.github.com/repos/jdan/isomer/languages 这里输出的不同之处在于它通常不是我们期望的 JSON 格式,即“label”:“value”。它是“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: 这个官方链接有 "label":"value" 案例的例子,但是我如何提取这样的东西,即我直接拥有信息的 JSON 类型。

【问题讨论】:

    标签: scala json4s


    【解决方案1】:
    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)
    

    【讨论】:

      【解决方案2】:

      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)
      

      【讨论】:

      • val 响应:HttpResponse[String]=Http(url).asString; val responseJson = parse(responseLangUrl.body);此 responseJson 没有提取方法。有什么想法吗?
      • 您需要将DefaultFormats 纳入范围。 github.com/json4s/json4s#extracting-values
      猜你喜欢
      • 2020-04-27
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2016-01-03
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多