2015-06-23 61 views
0

我正在尝试将YAML文件加载到groovy程序中,但一直未能成功完成。我想导入一个带有第一个,最后一个中间名称键的地图,其值是具有相应种族值的名称。使用SnakeYaml加载YAML嵌套地图

这是我试图运行代码:

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(入射部)”得到一个错误。

错误写着:“映射值在此允许‘读者’,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是一个标量,那么它不能并列在一个映射旁边。要么使之成为映射密钥本身(注意减少缩进以及在第一行额外的冒号):

---#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