Я не использовал Модуль Джексона Скала, но в Джерксоне поведение такое же, поэтому я рискну догадаться, что происходит.Когда REPL печатает:
myList -> [{test2=321323}, {test3=11122}])
, он сообщает вам, что есть кортеж, содержащий «myList» и java.util.ArrayList.ArrayList содержит два java.util.LinkedHashMaps.(Я объясняю это, потому что поначалу мне это было неочевидно, и мне пришлось потратить некоторое время на REPL, используя getClass и asInstanceOf, чтобы погрузиться в эту структуру.)
Я вполне уверен, что нетспособ получить модуль Jackson Scala или Jerkson вернуть десериализованный JSON с собственными коллекциями Scala.Вы можете импортировать scala.collect.JavaConversions , чтобы эти значения выглядели немного более похожими на Scala.Даже если вы сделаете это, вам все равно придется разбрасываться.Например:
import com.codahale.jerkson.Json._
import collection.JavaConversions._
import java.util._
res("myList").asInstanceOf[ArrayList[LinkedHashMap[String,String]]](0)("test2")
>> String = 321323
Если вы не хотите возиться со всеми приведениями, я думаю, вам нужно определить класс для десериализации.Так, например, с использованием Jerkson:
import com.codahale.jerkson.Json._
import collection.immutable.{Map,List}
case class MyClass(test: Integer, myList: List[Map[String,String]])
object M {
def main(args: Array[String]) {
val t =parse[MyClass]("""{"test":"113123","myList":[{"test2":"321323"},{"test3":"11122"}]}""")
println(t.myList(0)("test2"))
}
}
(Причина, по которой я написал, что полная программа заключается в том, что Jerkson не обрабатывает десериализационные классы case в REPL.)
Я знаю васможет десериализовать объект с Джексоном, но в прошлый раз, когда я посмотрел, потребовалось еще несколько шагов.
Это правильный путь для ответа на ваш вопрос?