【问题标题】:Bulk validating yaml files批量验证 yaml 文件
【发布时间】:2015-12-08 08:11:26
【问题描述】:

我需要验证一大堆 YAML 文件。

我尝试了 yaml 在线解析器 (http://yaml-online-parser.appspot.com/),它运行良好,但是将每个 YAML 文件内容复制到框中并解析它们的手动工作量太大。

有没有办法批量解析/验证 YAML 文件?

【问题讨论】:

    标签: parsing yaml


    【解决方案1】:

    这在任何具有 YAML 库的脚本语言中都相当简单。例如,您可以在 Ruby 中执行以下操作:

    #!/usr/bin/env ruby
    
    require "yaml"
    
    def check_file(filename)
      YAML.parse_file(filename)
      puts "OK"
      0
    rescue Psych::SyntaxError => ex
      puts "Error#{ex.message[/: .+/]}"
      1
    end
    
    exit_code = 0
    max_filename_length = ARGV.max_by(&:size).size
    
    ARGV.each do |filename|
      printf "%-*s  ", max_filename_length, filename
      exit_code |= check_file(filename)
    end
    
    exit exit_code
    

    用法:

    $ ruby check_yaml.rb *.yml
    config-1.yml  OK
    config-2.yml  OK
    invalid.yml   Error: did not find expected key while parsing a block mapping at line 2 column 3
    xyzzy.yml     OK
    
    $ echo $EXIT_CODE
    1
    

    【讨论】:

    • 谢谢乔丹!我对 Ruby 不是很熟悉,但是你能向我解释一下我应该如何使用 ruby​​ 代码吗?如果我理解正确,我会: 1. 通过将代码复制到其中来创建一个 .rb 文件。 2. cd 进入包含所有 yaml 文件的目录。 3. 在命令行中输入ruby check_yaml.rb *.yml。检查所有这些。对吗?
    • 是的,没错。或者您可以列出要检查的每个文件,例如ruby check_yaml.rb path/to/file.yml path/to/another/file.yml
    • 请注意,如果check_yaml.rb 与您所在的目录不同,则必须提供相对或绝对路径。
    • 谢谢乔丹!效果很好!我还有 2 个后续问题: 1. 是否可以检查具有子文件夹的文件夹中的 yaml 文件? 2. 是否所有 YAML 都遵循相同的语法?因为我知道 Markdown 文件有不同的风格,那么 yaml 有同样的东西吗?谢谢!
    • 1.是的。您可以使用扩展的通配符,例如foo/**/*.yml。这里有更多信息:stackoverflow.com/questions/3529997/… 如果你有太多的文件要在一个命令行中使用,你可以使用find-exec 选项或xargs。 2. 是的,只有一个 YAML 标准,所以你不应该对多种风格有任何问题。官方规范有不同的版本,尽管差异很小;大多数工具支持 1.1;有些不支持1.2。您可以通过yaml.org了解更多信息。
    【解决方案2】:

    只是想分享另一个我发现也有用的 YAML 解析器。

    https://www.npmjs.com/package/yaml-to-json

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 2020-10-04
      • 2020-07-10
      • 2019-06-12
      • 2016-05-31
      • 2019-01-30
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多