Моя цель - прочитать и выполнить итерацию по вложенным картам JSON в том же порядке, в котором они появились в исходном файле JSON.Например, с JSON, например
{'nested': {'key2': 2, 'key1': 1}}
Я хочу иметь возможность выполнять итерациюповерх «вложенной» карты в том же порядке ключи появились в исходном JSON.
Привязки Jackson Scala по умолчанию используют Map1-Map4 для 1-4 ключей и HashTrieMap для 5 или более ключей.Я хотел бы использовать ListMap в качестве конкретной реализации Map для того, чтобы (надеюсь) сохранить порядок ключей.Кажется, есть ряд предложений (SimpleModule.addAbstractTypeMapping, SimpleAbstractTypeResolver.addMapping и другие), но я не смог заставить ни одно из них работать.Мой текущий код -
val module = new SimpleModule
module.addAbstractTypeMapping(classOf[Map[_, _]], classOf[ListMap[_, _]])
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.registerModule(module)
val json = """{
"inside" : {
"val1" : 1,
"val3" : "17",
"val2" : "hello2",
"val0" : "hello0",
"val21" : "hello21"
}}"""
val parsed = mapper.readValue[Map[String, Any]](json)
println(parsed.getClass)
parsed.get("inside") match {
case Some(l) => {println(l.getClass); println(l)}
case None => println("none")
}
, что приводит к выводу
класса scala.collection.immutable.Map $ Map1 class scala.collection.immutable.HashMap $ HashTrieMap Map (val1-> 1, val3 -> 17, val21 -> hello21, val2 -> hello2, val0 -> hello0)
, который не является ни ListMap, ни исходным порядком JSON.В настоящее время я использую Jackson 2.9.6, но с удовольствием меняю версии, если это необходимо для получения желаемого эффекта.