代码之家  ›  专栏  ›  技术社区  ›  yalkris

scala按顺序解析json对象

  •  1
  • yalkris  · 技术社区  · 6 年前

    scala> result
    res6: play.api.libs.json.JsValue = {"L0": 
    {"name":"FASHION","id":"50000"},"L1":{"name":"ACCESSORIES AND TRAVEL","id":"51000"},"L2":{"name":"FASHION ACCESSORIES","id":"51001"},"L3":{"name":"MENS FASHION ACCESSORIES","id":"51100"},"L4":{"name":"MENS HATS","id":"51204"}}
    
    scala> result \\ "name"
    res5: Seq[play.api.libs.json.JsValue] = List("ACCESSORIES AND TRAVEL", "MENS HATS", "MENS FASHION ACCESSORIES", "FASHION ACCESSORIES", "FASHION")
    

    我想把这些名字整理好

    List("FASHION", "ACCESSORIES AND TRAVEL", "FASHION ACCESSORIES", "MENS FASHION ACCESSORIES", "MENS HATS")
    

    有没有办法用play Json库来实现这一点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   pme    6 年前

    case classes . 所以你的例子看起来像:

    val json = """{"L0": 
    {"name":"FASHION","id":"50000"},"L1":{"name":"ACCESSORIES AND TRAVEL","id":"51000"},"L2":{"name":"FASHION ACCESSORIES","id":"51001"},"L3":{"name":"MENS FASHION ACCESSORIES","id":"51100"},"L4":{"name":"MENS HATS","id":"51204"}}
    """
    
    case class Element(id: String, name: String)
    object Element {
      implicit val jsonFormat: Format[Element] = Json.format[Element]
    }
    
    Json.parse(json).validate[Map[String, Element]] match {
      case JsSuccess(elems, _) => println(elems.toList.sortBy(_._1).map(e => e._2.name))
      case other => println(s"Handle exception $other")
    }
    

    这给你的是,你可以按键对结果进行排序-在你的解决方案中丢失的信息。