繁体   English   中英

我如何对 JObject 列表进行排序(Scala,json4s)

[英]How I can sort list of JObject (Scala, json4s)

我读了一个 JSON 文件并使用 json4s 来解析 JSON。

如何对从文件中读取的 JObject 数组进行排序?

package org.example

import org.json4s._
import org.json4s.native.JsonMethods._

object Main extends App {
  val file = scala.io.Source.fromURL("https://raw.githubusercontent.com/mledoze/countries/master/countries.json")
  val text = file.mkString

  val json = parse(text)

  val countries = json.children

  countries.sortBy(...)

}

每个国家/地区都有一个字段“区域”,我需要按此字段对列表进行排序。 我不知道在这种情况下如何使用 sortBy,因为该国不只是一些 class 的 object。 这是 JObject,字段“area”的类型为 JInt。

你能帮助我吗? 或者,也许您知道其他解决方案?

谢谢,Gaël J 的提示。

我解决了我的问题如下:

package org.example

import org.json4s._
import org.json4s.native.JsonMethods._

object Main extends App {
  val file = scala.io.Source.fromURL("https://raw.githubusercontent.com/mledoze/countries/master/countries.json")
  val text = file.mkString

  val json = parse(text)

  val countries = json.children

  val countriesSorted = countries.sortWith((x: JValue, y: JValue) => {

    //File has a few countries with area that has type of Double
    def getValue(value: JValue): Double = {
      value \ "area" match {
        case JDouble(value) => value
        case JInt(value) => value.toDouble
        case _ => 0
      }
    }

    val xValue = getValue(x)
    val yValue = getValue(y)

    xValue > yValue

  })

  for (country <- countriesSorted)
    println(country \ "area")

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM