我正在编写一个网站,它将URL获取参数作为JSON文件的链接,并将其转换为外观漂亮的html页面(即不是表格)。部分内容需要一个递归函数来解析JSON文件。我想要的是看起来像html标题的键。数组中的每个值都在一个单独的行上,而字符串中的每个值都有一个粗体键,其值在同一行上。最重要的是,我希望页面缩进JSON文件的内容,就像您希望缩进JSON文件一样。
答案 0 :(得分:1)
我认为这个递归函数可以很好地将JSON文件转换为漂亮的html页面。
def parse(hash, iteration=0 )
iteration += 1
output = ""
hash.each do |key, value|
if value.is_a?(Hash)
output += "<div class='entry' style='margin-left:#{iteration}em'> <span style='font-size:#{250 - iteration*20}%'>#{key}: </span><br>"
output += parse(value,iteration)
output += "</div>"
elsif value.is_a?(Array)
output += "<div class='entry' style='margin-left:#{iteration}em'> <span style='font-size:#{250 - iteration*20}%'>#{key}: </span><br>"
value.each do |value|
if value.is_a?(String) then
output += "<div style='margin-left:#{iteration}em'>#{value} </div>"
else
output += parse(value,iteration-1)
end
end
output += "</div>"
else
output += "<div class='entry' style='margin-left:#{iteration}em'> <span style='font-weight: bold'>#{key}: </span>#{value}</div>"
end
end
return output
end
以下是它的工作原理。您通过将JSON文件转换为哈希值来传递哈希值:
jsonFile = JSON.load(open(params["url"] ))
@output = parse(jsonFile)
该函数检查散列中的每个值,并执行以下三项操作之一:
在此之后,您只需将@output变量输出到视图文件的屏幕上:
<%= @output.html_safe %>
迭代的作用是跟踪调用函数的次数,以便输出可以正确缩进
我希望这可以帮助那些试图做同样事情的人。