json4s IndexOutOfBoundsException при десериализации json String - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь десериализовать простую строку json с помощью jackson json4s. Мне удалось заставить это работать в scala 2.11, но при обновлении до 2.12 я вижу эту ошибку:

  import org.json4s._
  import org.json4s.jackson.Serialization.read
    
  implicit val formats: DefaultFormats.type = DefaultFormats

  case class Person(val name: String, val address: Option[String])

В Scala 2.11, когда я запускаю набор кода, Я получаю следующее:

  println(jackson.parseJson(f"""{ "name": "foo" }""").extract[Person])

  Result: Person(foo,None)

В Scala 2.12 я получаю следующее:

  println(jackson.parseJson(f"""{ "name": "foo" }""").extract[Person])

  org.json4s.package$MappingException: unknown error
  at org.json4s.Extraction$.extract(Extraction.scala:43)
  at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21)
  ... 52 elided
Caused by: java.lang.IndexOutOfBoundsException: 2
  at scala.collection.immutable.Vector.checkRangeConvert(Vector.scala:127)
  at scala.collection.immutable.Vector.apply(Vector.scala:118)
  at org.json4s.reflect.Reflector$ClassDescriptorBuilder.$anonfun$createConstructorDescriptors$6(Reflector.scala:156)
  at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
  at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
  at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
  at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
  at scala.collection.TraversableLike.map(TraversableLike.scala:238)
  at scala.collection.TraversableLike.map$(TraversableLike.scala:231)
  at scala.collection.AbstractTraversable.map(Traversable.scala:108)
  at org.json4s.reflect.Reflector$ClassDescriptorBuilder.$anonfun$createConstructorDescriptors$3(Reflector.scala:142)
  at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
  at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:75)
  at scala.collection.TraversableLike.map(TraversableLike.scala:238)
  at scala.collection.TraversableLike.map$(TraversableLike.scala:231)
  at scala.collection.AbstractTraversable.map(Traversable.scala:108)
  at org.json4s.reflect.Reflector$ClassDescriptorBuilder.createConstructorDescriptors(Reflector.scala:136)
  at org.json4s.reflect.Reflector$ClassDescriptorBuilder.constructorsAndCompanion(Reflector.scala:121)
  at org.json4s.reflect.Reflector$ClassDescriptorBuilder.result(Reflector.scala:183)
  at org.json4s.reflect.Reflector$.createDescriptor(Reflector.scala:53)
  at org.json4s.reflect.Reflector$.$anonfun$describe$1(Reflector.scala:48)
  at org.json4s.reflect.package$Memo.apply(package.scala:36)
  at org.json4s.reflect.Reflector$.describe(Reflector.scala:48)
  at org.json4s.Extraction$.$anonfun$extract$9(Extraction.scala:393)
  at org.json4s.Extraction$.customOrElse(Extraction.scala:606)
  at org.json4s.Extraction$.extract(Extraction.scala:392)
  at org.json4s.Extraction$.extract(Extraction.scala:39)
  ... 53 more

Я использую следующие версии библиотек json4s:

Scala 2.11

  • json4s-ast_2.11-3.5.3.jar
  • json4s-core_2.11-3.5.3.jar
  • json4s -jackson_2.11-3.5.3.jar
  • json4s-scalap_2.11-3.5.3.jar

Scala 2.12

  • json4s -ast_2.12-3.5.3.jar
  • json4s-core_2.12-3.5.3.jar
  • json4s-jackson_2.12-3.5.3.jar
  • json4s-scalap_2.12-3.5.3.jar

Не могли бы вы сообщить мне, что я здесь делаю не так?

1 Ответ

0 голосов
/ 03 августа 2020

Я не могу воспроизвести проблему. Я использую json4s-core_2.12-3.5.3 и json4s-jackson_2.12-3.5.3 с Scala 2.12.10, но он правильно анализирует. См. https://scastie.scala-lang.org/IMs6t86PTlyfS9F00V32vw.

...