У меня есть эта строка, и мне интересно, как ее преобразовать в хэш.
"{:account_id=>4444, :deposit_id=>3333}"
Ответ 1
Угадай, я никогда не писал об этом обходной путь... Вот оно,
# strip the hash down
stringy_hash = "account_id=>4444, deposit_id=>3333"
# turn string into hash
Hash[stringy_hash.split(",").collect{|x| x.strip.split("=>")}]
Ответ 2
Способ, предложенный в ответе miku, действительно проще всего и unsafest.
# DO NOT RUN IT
eval '{:surprise => "#{system \"rm -rf / \"}"}'
# SERIOUSLY, DON'T
Рассмотрим использование другого строкового представления ваших хешей, например. JSON или YAML. Это более безопасно и по крайней мере одинаково устойчиво.
Ответ 3
С небольшой заменой вы можете использовать YAML:
require 'yaml'
p YAML.load(
"{:account_id=>4444, :deposit_id=>3333}".gsub(/=>/, ': ')
)
Но это работает только для этой конкретной простой строки. В зависимости от ваших реальных данных могут возникнуть проблемы.
Ответ 4
Самый простой и unsafest - это просто оценить строку:
>> s = "{:account_id=>4444, :deposit_id=>3333}"
>> h = eval(s)
=> {:account_id=>4444, :deposit_id=>3333}
>> h.class
=> Hash
Ответ 5
если ваш хеш строки является чем-то вроде этого (он может быть вложенным или простым хэшем)