Загрузка вложенной карты 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