Мой контроллер получает строку JSON в Params, которая выглядит следующим образом:Руби/Rails - проблемы с JSON.parse/JSON.decode
{"serialized"=>"{\"key\":{\"subkey1\":"value",\"subkey2\":"value"}"}
В моем контроллере я стараюсь следующее:
JSON.parse(params[:serialized], symbolize_names: true)
Который возвращает:
{:"key"=>{:subkey1=>"value", :subkey2=>"value"}
Все вложенные подразделы символизировал; ключ был символизирован странным образом, поэтому он не отвечает на hash [key], но делает это для hash ["key"].
Если я иду через Rails стек:
ActiveSupport::JSON.decode(params[:serialized]).symbolize_keys
я вернусь следующее:
{:"key"=>{"subkey1"=>"value", "subkey2"=>"value"}
Почти так же, как и первый для вложенных ключей, за исключением; они не символизируются.
Я даже пробовал перебирать хэш, пытаясь символизировать ключи вручную; без успеха:
Hash[params[:serialized]{ |k, v| [k.to_sym, v] }] # returns {:"key"=>{"subkey1"=>"value", "subkey2"=>"value2"}
Почему это происходит? Почему ключ обозначен как : «ключ» вместо : ключ?
UPD Удалены последняя строка (Как я мог исправить, так как мне нужен мой хэш, чтобы ответить на хэш [ключ] и не хэша [ «ключ»].), Так что вопрос выглядит менее прагматичен и более теоретический.
FWIW ': ключ ==: "ключ" # => true' –
Почему вы ожидаете' хэш [ключ] 'вместо' хэш [: ключ] 'быть возможно? – sawa
@SeamusAbshere Да, я знаю, спасибо – Ruslan