JSON-объект для объекта rails - PullRequest
       22

JSON-объект для объекта rails

0 голосов
/ 25 апреля 2011

Я создаю объект JSON в своем представлении html, используя JSON.stringify (объект), который выводит следующий объект 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]}
]

Ответы [ 4 ]

2 голосов
/ 25 апреля 2011
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 голосов
/ 25 апреля 2011
{
 "0X1W6": "{\"type\":\"Hourly\",\"hr\":\"12\",\"min\":\"30\",\"every_hr\":\"5\"}",
  "Tk18f": "{\"type\":\"Daily\",\"hr\":\"12\",\"min\":\"30\",\"days_checked\":[1,4]}"
}.to_json
0 голосов
/ 25 апреля 2011

Когда я правильно понимаю, у вас есть JSON и вам нужен рубиновый хеш.В рельсах это можно сделать с помощью ActiveSupport :: Json.decode (json), в то время как «json» является строкой.Но это не даст вам точных результатов, которые вы ищете, вам также нужно будет сделать:

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

Надеюсь, это поможет.

0 голосов
/ 25 апреля 2011

Я предполагаю, что вы передаете этот JSON из JavaScript на ваш сервер.На сервере вы можете использовать гем 'json' для анализа JSON следующим образом: o = JSON.parse json_string.

Если вам буквально необходимо объединить структуру данных (удаляя ключи 0X1W6 и Tk18f), вам придется постобработать хэш ruby ​​в массив.Используя ту же технику, вы можете конвертировать строковые ключи в символы.

...