将JSON语法解析为ruby对象

时间:2017-08-02 11:06:05

标签: ruby parsing

简单的解析器,结果比我想象的要困难得多。我需要一个字符串解析器来将嵌套字段转换为ruby对象。在我的情况下,api响应只会返回所需的字段。

给出

Parser.parse "album{name, photo{name, picture, tags}}, post{id}"

期望的输出或类似的

{album: [:name, photo: [:name, :picture, :tags]], post: [:id]}

有什么想法?

1 个答案:

答案 0 :(得分:0)

写了我自己的解决方案

module Parser
  extend self

  def parse str
    parse_list(str).map do |i|
      extract_item_fields i
    end
  end

  def extract_item_fields item
    field_name, fields_str = item.scan(/(.+?){(.+)}/).flatten

    if field_name.nil?
      item
    else
      fields = parse_list fields_str
      result = fields.map { |field| extract_item_fields(field) }

      { field_name => result }
    end
  end

  def parse_list list
    return list if list.nil?
    list.concat(',').scan(/([^,{}]+({.+?})?),/).map(&:first).map(&:strip)
  end
end

str = 'album{name, photo{name, picture, tags}}, post{id}'
puts Parser.parse(str).inspect
# => [{"album"=>["name", {"photo"=>["name", "picture", "tags"]}]}, {"post"=>["id"]}]