Разбор JSON на основе схемы с рекурсивными полями в Scala - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть json-схема (https://json -schema.org ) с рекурсивными полями, и я хотел бы программно проанализировать json, который придерживается схемы в Scala.

Одним из вариантов является использование Argus (https://github.com/aishfenton/Argus),, но единственная проблема заключается в том, что он использует макросы Scala, поэтому решение, использующее эту библиотеку, не поддерживается IntelliJ.

Какой рекомендуемый способ выполнениятакая задача в Scala, желательно такая, которая хорошо работает с IntelliJ?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Я не знаю, что вы имеете в виду под рекурсивными полями.Но есть много разных библиотек для разбора json.Вы могли бы использовать lift-json
https://github.com/lift/framework/tree/master/core/json

, который кажется популярным, по крайней мере из того, что я видел здесь на Stackoverflow.Но лично мне очень удобно и я предпочитаю play.json
https://www.playframework.com/documentation/2.6.x/ScalaJson#Json
(также я использую IntelliJ и работаю в Play-framework)

Если вы действительно не хотите использоватькакие-нибудь специальные библиотеки, кто-то пытался сделать это здесь Как анализировать JSON в Scala, используя стандартные классы Scala?

0 голосов
/ 21 декабря 2018

Circe - отличная библиотека для работы с JSON.В следующем примере используется полуавтоматическое декодирование .У Circe также есть направляющие для автоматического декодирования и для использования пользовательских кодеков .

import io.circe.Decoder
import io.circe.parser.decode
import io.circe.generic.semiauto.deriveDecoder

object Example {

  case class MyClass(name: String, code: Int, sub: MySubClass)
  case class MySubClass(value: Int)
  implicit val myClassDecoder:    Decoder[MyClass]    = deriveDecoder
  implicit val mySubClassDecoder: Decoder[MySubClass] = deriveDecoder

  def main(args: Array[String]): Unit = {
    val input = """{"name": "Bob", "code": 200, "sub": {"value": 42}}"""
    println(decode[MyClass](input).fold(_ => "parse failed", _.toString))
  }

}
0 голосов
/ 20 декабря 2018

Вы смотрели на https://github.com/circe/circe, довольно хорошо разобрать Json с набранным форматом.

...