Scala Parse JSON объектов в порядке - PullRequest
0 голосов
/ 21 сентября 2018

У меня следующий json-ввод, где я пытаюсь разобрать поле имени по порядку

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 Ответ

0 голосов
/ 13 ноября 2018

В Play JSON я всегда использую case classes.Ваш пример будет выглядеть так:

import play.api.libs.json ._

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")
}

Это дает вам то, что вы можете отсортировать результат по ключу - информациячто потеряно в вашем решении.

...