2015-06-23 8 views
0

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

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

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, хотя мой файл выглядит довольно стандартным.

ответ

0

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

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

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

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

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

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

или сделать два juxtaposted пункты списка:

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

Просто оставьте разделителем в одиночку или оставьте его:

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