Загрузка вложенной карты YAML с использованием SnakeYaml

Я пытаюсь загрузить файл YAML в программу Groovy и не смог сделать это успешно. Я хотел бы импортировать карту с ключами первого, последнего отчества, значениями которых являются имена с соответствующим значением этнической принадлежности.

Это код, который я пытаюсь запустить:

    import java.util.List
    import java.util.ArrayList
    import java.io.FileInputStream
    import java.io.InputStream
    import org.yaml.snakeyaml.Yaml
    import java.util.Map
    import java.util.HashMap

    class BestRandomController {

         def index() {


                String gender, firstName, lastName
                List<String> firstNameList
                List<String> lastNameList
                Map<String, String> mapNames = new HashMap<String, String>()
                Map<String, Map <String, String>> mapPeople = new HashMap<String,Map <String,String>>()
                InputStream inputter = new FileInputStream(new File("/home/ian/Desktop/dataGeneration/vimNames.yaml"))




               Yaml sneakySnake = new Yaml()
               mapPeople=sneakySnake.load(inputter)

               render mapPeople

               render mapPeople.get('lastNames')

               mapNames = mapPeople.get('lastNames')

Я получаю сообщение об ошибке "mapPeoople=sneakySnake.load(inputter)".

Ошибка гласит: "Значения сопоставления здесь не разрешены в" читателе ", строка 2, столбец 10: lastNames: ^ "

Мой файл yaml, который я использую для тестирования:

    ---#Names
    lastNames:
     Daghistani: White
     Terry: White
     Poksay: White
     Williams: White   
     Wade: Black

Что я могу сделать, чтобы сделать эту работу? Мне интересно, если это проблема в настройке моего кода или моего файла YAML, хотя мой файл кажется довольно стандартным.

2 ответа

Просто оставьте разделитель в покое или бросьте его:

#Names
lastNames:
 Daghistani: White
 Terry: White
 Poksay: White
 Williams: White
 Wade: Black

Ваш входной файл неверный YAML, так как первая строка содержит скаляр ---#Names и это не может сопровождаться отображением на том же уровне отступа.

Если вы хотите, чтобы первая строка была закомментированным разделителем файлов, используйте:

--- # Names
    lastNames:
     Daghistani: White
     Terry: White
     Poksay: White
     Williams: White
     Wade: Black

в качестве комментария нужен пробел после # в YAML и нужно отделить маркер начала документа (---) из комментария (примеры в официальной документации здесь).

Если вы намеревались ---#Names чтобы быть скаляром, его нельзя сопоставить рядом с отображением. Либо сделайте его самим ключом сопоставления (обратите внимание на отступы и дополнительные двоеточия в первой строке):

---#Names:
    lastNames:
     Daghistani: White
     Terry: White
     Poksay: White
     Williams: White
     Wade: Black

или сделайте два сопоставленных элемента списком:

   - ---#Names
   - lastNames:
     Daghistani: White
     Terry: White
     Poksay: White
     Williams: White
     Wade: Black
Другие вопросы по тегам