简单的解析器,结果比我想象的要困难得多。我需要一个字符串解析器来将嵌套字段转换为ruby对象。在我的情况下,api响应只会返回所需的字段。
给出
Parser.parse "album{name, photo{name, picture, tags}}, post{id}"
期望的输出或类似的
{album: [:name, photo: [:name, :picture, :tags]], post: [:id]}
有什么想法?
答案 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"]}]