【问题标题】:How can I convert a JSON file to a html page in Ruby on Rails? [closed]如何在 Ruby on Rails 中将 JSON 文件转换为 html 页面? [关闭]
【发布时间】:2023-03-10 12:00:02
【问题描述】:

我正在编写一个网站,该网站将一个指向 JSON 文件的链接作为 URL 获取参数,并将其转换为一个好看的 html 页面(即不是表格)。其中一部分需要递归函数来解析 JSON 文件。我想要的是看起来像 html 标题的键。 Array 中的每个值都位于单独的行上,而字符串则具有粗体键,值位于同一行上。最重要的是,我希望页面缩进 JSON 文件的内容,就像您期望 JSON 文件缩进一样。

【问题讨论】:

  • 大家好,首先我很抱歉这个问题不适合堆栈溢出。我打算做的是回答我自己的问题(请参阅下面的答案),以便与我有相同问题的其他人可以有一个很好的例子来解决这个问题。请你能告诉我如何重写我的问题,记住我发布的答案吗? @AndreyDeineko 我也知道 JSON 和 HTML 是两种完全不同的东西,但在某些情况下(比如我自己的),有必要将一种文件格式转换为另一种文件格式。我不认为你的评论很有成效。
  • @AndreyDeineko cmets 应该以建设性的方式要求澄清或批评。如果你觉得这个问题不好,你可以投反对票。制作像你这样的 cmets 对 Stack Overflow 社区的质量或用户体验没有任何帮助或贡献。这只是不必要的。
  • @Brad 我之前读过这篇文章,再读一遍之后我仍然不明白为什么我的帖子不是一个好问题。 (我并不反对你只是想学习)。我知道在短短几分钟内至少有 7 人投了反对票,所以肯定有问题,但我不明白你能帮忙解释什么问题吗?
  • @KNejad 作为 stackoverflow 大厦的一部分,还有另一个站点称为 codereview.stackexchange.com。我认为你的问题很适合那里

标签: html ruby-on-rails json ruby


【解决方案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)

该函数会检查散列中的每个值并执行 3 件事中的 1 件事:

  1. 如果是数组,则输出每个数组元素换行
  2. 如果是字符串输出key和value在同一行
  3. 如果是另一个Hash调用同一个函数

在这之后,你要做的就是将@output变量输出到视图文件的屏幕上:

<%= @output.html_safe %>

迭代的作用是跟踪函数被调用的次数,以便输出可以正确缩进

我希望这对尝试做同样事情的其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2014-07-13
    • 2017-05-05
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多