У меня есть рубиновый хеш, который выглядит так
{ "stuff_attributes" => {
"1" => {"foo" => "bar", "baz" => "quux"},
"2" => {"foo" => "bar", "baz" => "quux"}
}
}
и я хочу превратить его в хеш, который выглядит следующим образом
{ "stuff_attributes" => [
{ "foo" => "bar", "baz" => "quux"},
{ "foo" => "bar", "baz" => "quux"}
]
}
Мне также нужно сохранить числовой порядок клавиш, и есть переменное количество клавиш. Выше очень упрощенный, но я включил реальный пример внизу. Какой лучший способ сделать это?
P.S
Он также должен быть рекурсивным
Что касается рекурсии, вот что мы можем предположить:
1) ключ, которым нужно манипулировать, будет соответствовать / _attributes $ /
2) хеш будет иметь много других ключей, которые не соответствуют / _attributes $ /
3) ключи внутри хеша всегда будут числом
4) хеш _attributes может находиться на любом уровне хеша под любым другим ключом
этот хеш на самом деле является хешем params из действия create в контроллере. Это реальный пример того, что нужно будет проанализировать с помощью этой процедуры.
{
"commit"=>"Save",
"tdsheet"=>{
"team_id"=>"43",
"title"=>"",
"performing_org_id"=>"10",
"tdsinitneed_attributes"=>{
"0"=>{
"title"=>"",
"need_date"=>"",
"description"=>"",
"expected_providing_organization_id"=>"41"
},
"1"=>{
"title"=>"",
"need_date"=>"",
"description"=>"",
"expected_providing_organization_id"=>"41"
}
},
"level_two_studycollection_id"=>"27",
"plan_attributes"=>{
"0"=>{
"start_date"=>"", "end_date"=>""
}
},
"dataitem_attributes"=>{
"0"=>{
"title"=>"",
"description"=>"",
"plan_attributes"=>{
"0"=>{
"start_date"=>"",
"end_date"=>""
}
}
},
"1"=>{
"title"=>"",
"description"=>"",
"plan_attributes"=>{
"0"=>{
"start_date"=>"",
"end_date"=>""
}
}
}
}
},
"action"=>"create",
"studycollection_level"=>"",
"controller"=>"tdsheets"
}