使用SnakeYaml

时间:2015-06-23 00:43:25

标签: grails dictionary groovy 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')

我收到了一行错误&#34; mapPeoople = sneakySnake.load(输入者)&#34;。

错误显示为:&#34;此处不允许在&#39; reader&#39;,第2行,第10列中显示映射值:lastNames:^&#34;

我用于测试的yaml文件是:

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

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

2 个答案:

答案 0 :(得分: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

或将两个并列项目列为一个列表:

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

答案 1 :(得分:0)

单独留下分隔符或放下分隔符:

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