【问题标题】:Loading a YAML nested map using SnakeYaml使用 SnakeYaml 加载 YAML 嵌套地图
【发布时间】:2015-06-23 00:43:24
【问题描述】:

我正在尝试将 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 文件设置中的问题,尽管我的文件看起来很标准。

【问题讨论】:

    标签: grails dictionary groovy yaml snakeyaml


    【解决方案1】:

    您的输入文件不是正确的 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
    

    或将两个并列的项目列成一个列表:

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

    【讨论】:

      【解决方案2】:

      只留下分隔符或删除它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-08
        • 2013-08-27
        • 1970-01-01
        • 2018-12-26
        • 2018-07-22
        • 2015-11-05
        • 2018-11-29
        • 2014-02-04
        相关资源
        最近更新 更多