首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中解析类似YAML的字符串的最佳方法是什么?

在Ruby中解析类似YAML的字符串的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-03-20 00:38:08
回答 1查看 109关注 0票数 0

我想解析来自identify -verbose (ImageMagick)的输出,并将其作为哈希值返回。输出如下所示:

代码语言:javascript
复制
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
  Class: DirectClass
  Geometry: 200x276+0+0
  Resolution: 300x300
  Print size: 0.666667x0.92
  Units: PixelsPerInch
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Pixels: 55200
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 53.5216 (0.209889)
      standard deviation: 50.4831 (0.197973)
      kurtosis: 1.76124
      skewness: 1.173

现在,我试图作弊并在上面使用YAML.load,但我得到了一个ParseError (这一直是一个很长的机会,谁知道是什么原因导致它无效)。

那么,有没有一种优雅的方法可以将其解析为嵌套的散列呢?我想像这样得到输出:

代码语言:javascript
复制
{
  "Format" => "JPEG (Joint Photographic Experts Group JFIF format)",
  "Mime type" => "image/jpeg",
  "Class" => "DirectClass",
  ...
  "Channel depth" => {
    "red": "8-bit",
    "green": "8-bit",
    "blue": "8-bit",
  },
  ...
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-20 00:59:05

尝试将其转换为有效的YAML。这个输出非常接近,实际上,如果您用Image:\n Name: <name>替换Image: <name>行,就可以直接解析它。

这里有一个至少适用于你的例子的杂乱无章:

代码语言:javascript
复制
require 'yaml'

def parse_image_magick_output(str)
  YAML::load(str.sub(/Image:\s*(.*?)$/m, "Image:\n  Name: \\1"))
end

pp parse_image_magick_output(get_im_output) # =>
# {"Image"=>
#   {"Name"=>"spec/fixtures/default.jpg",
#    "Format"=>"JPEG (Joint Photographic Experts Group JFIF format)",
#    "Mime type"=>"image/jpeg",
#    ...
#        "standard deviation"=>"50.4831 (0.197973)",
#        "kurtosis"=>1.76124,
#        "skewness"=>1.173}}}}

当然,不同的YAML子命令可能会产生类似的非ImageMagick输出(例如,不仅仅是图像/名称的这种情况),所以不能保证这个示例在一般情况下都能正常工作(尽管您可以通过稍微多做一点工作就可以在一般的情况下匹配应该是YAML值的映射)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29150200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档