0

我正在尝试将 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)”这一行收到错误消息。

错误显示:“在'reader',第2行,第10列中不允许映射值:lastNames:^”

我用于测试的 yaml 文件是这样的:

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

我能做些什么来完成这项工作?我想知道这是否是我的代码或 YAML 文件设置中的问题,尽管我的文件看起来很标准。

4

2 回答 2

0

您的输入文件不是正确的 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
于 2015-06-24T06:32:45.917 回答
0

只需保留分隔符或删除它:

#Names
lastNames:
 Daghistani: White
 Terry: White
 Poksay: White
 Williams: White
 Wade: Black
于 2015-06-26T11:53:50.267 回答