JSON对象转换为rails对象

JSON object to a rails object

本文关键字:对象 rails 转换 JSON      更新时间:2023-09-26

我在html视图中使用JSON.stringfy(object(创建了一个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]}
]
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
{
 "0X1W6": "{'"type'":'"Hourly'",'"hr'":'"12'",'"min'":'"30'",'"every_hr'":'"5'"}",
  "Tk18f": "{'"type'":'"Daily'",'"hr'":'"12'",'"min'":'"30'",'"days_checked'":[1,4]}"
}.to_json

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

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

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

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

我希望这能有所帮助。