【问题标题】:JSON object to a rails objectJSON 对象到 rails 对象
【发布时间】:2011-04-25 13:01:23
【问题描述】:

我使用 JSON.stringify(object) 在我的 html 视图中创建一个 JSON 对象,它输出以下 JSON 对象

{
 "0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}",
  "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}"
}

如何将其转换为如下所示的 ruby​​ 对象:

[
  { :type => 'Hourly', :hr => 12, :min => 30, :every_hr => 5}
  { :type => 'Daily', :hr => 12, :min => 30, :days_checked => [1,4]}
]

【问题讨论】:

    标签: javascript ruby-on-rails json ruby-on-rails-3 parsing


    【解决方案1】:
    result = []
    
    z = ActiveSupport::JSON.decode( '{
      "0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}",
      "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}"
    }')
    
    z.each_value do|i|
      x = {}
      ActiveSupport::JSON.decode(i).each{|k,v|
        x[k.to_sym] = (v.class == String && v.to_i.to_s == v) ? v.to_i : v
      }
      result << x
    end
    

    【讨论】:

      【解决方案2】:
      {
       "0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}",
        "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}"
      }.to_json
      

      【讨论】:

        【解决方案3】:

        我假设您正在将该 JSON 从 JavaScript 传递到您的服务器。在服务器上,您可以使用 'json' gem 来解析 JSON,如下所示:o = JSON.parse json_string

        如果您确实需要组合数据结构(删除键 0X1W6 和 Tk18f),则必须将 ruby​​ 哈希后处理为数组。使用相同的技术,您可以将字符串键转换为符号。

        【讨论】:

        • JSON.parse json_string 将其解析为 { 0X1W6 => "{ type : Hourly....} 所以第二个散列被存储为字符串而不是散列
        【解决方案4】:

        如果我理解正确,你有 JSON 并且想要一个 ruby​​ 哈希。在 Rails 中,这可以通过 ActiveSupport::Json.decode(json) 来完成,而 'json' 是一个字符串。但这不会为您提供您正在寻找的确切结果,您还必须这样做:

        ActiveSupport::Json.decode(json).values.symbolize_keys
        

        我希望这会有所帮助。

        【讨论】:

        • 我得到未定义的方法`symbolize_keys'
        • 我假设您使用的是通过 activesupport 在 Hash 上提供此方法的 rails。如果没有导轨,您可以要求这部分的 activesupport 或自己符号化键,如 Sector 的帖子中所示。
        猜你喜欢
        • 1970-01-01
        • 2016-07-03
        • 2012-03-22
        • 2013-03-18
        • 2015-10-05
        • 1970-01-01
        • 2021-12-24
        • 2011-01-10
        • 2011-11-14
        相关资源
        最近更新 更多