Я пишу метод scala, который читает файл Yaml и возвращает карту содержимого файла Yaml.Я могу сделать это успешно, но работа со структурой данных очень громоздка, как я покажу ниже.
Примечание. Я могу и использовал Джексона в Scala, чтобы взять файл yaml и превратить его в класс case.Это прекрасно работает и не громоздко в использовании.В этой проблеме yaml является динамическим, поэтому нам нужно поместить его в динамическую структуру данных, т.е. Map или List of Map
В Java нет проблем в решении проблемы.С возвращаемой структурой данных легко работать.
Пример Java:
public Map readMapYml(String fullFileName) {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
try {
return mapper.readValue(new File(fullFileName), Map.class);
} catch (Exception e) {
throw new RuntimeException("JavaParser->writeYml:
Unable to write yaml file: " + e.getMessage());
}
}
Мой эквивалентный код scala.(Я также попробовал много вариантов кода ниже)
def readMapYml(fullFileName: String): Map[String,Any] = {
val mapper = new ObjectMapper(new YAMLFactory())
mapper.registerModule(DefaultScalaModule)
try {
mapper.readValue(new File(fullFileName), classOf[Map[String,Any]])
}
catch {
case e: Exception =>
throw new RuntimeException("Parser->readMapYml: Unable to read yaml
file to map. filename: " + fullFileName + " Message: " + e.getMessage)
}
}
Так что это работает, и я могу анализировать данные, но это действительно громоздко.
Пример того, как громоздко:
result.get("groups").get.asInstanceOf[List[Map[String,Any]]](0).get("group").get.asInstanceOf[Map[String,Any]].get("colors").get.asInstanceOf[List[Map[String,Any]]](0).get("color").get
Кстати, взаимодействие прекрасно работает, я могу написать это на Java и вызвать его из Scala.Однако в этом случае нам нужно, чтобы наш scala-код работал
Мой вопрос: я хотел бы, чтобы Джексон fastxml возвращал структуру данных, которую намного проще использовать, аналогично структуре данных, которую я получаю, когда делаю через Java,Как мне это сделать?