这是一个
complex_string
,我们想将其转换为哈希{:stats => str1, :search => str2}:
:stats => {<%=t('Payment Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>
<%=t('Contract Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract).sum(:contract_amount)), :precision => 2) %>},
:search => {}
最后,我们想将 str1 和 str2 分配给 2 个变量。我们尝试使用
eval(complex_string)
,但出现错误:
"(eval):1: syntax error, unexpected =>, expecting end-of-input :stats => {<%=t('Payment Tota... ^"
似乎是字符串中的
=>
导致错误。有没有办法可以将complex_string
转换成哈希?
这是适用于该特定案例的代码:
complex_string = ":stats => {<%=t('Payment Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>
<%=t('Contract Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract).sum(:contract_amount)), :precision => 2) %>},
:search => {}"
hash = {}
complex_string.scan(/^:(\S+) => ({.*?}),?$/m).each do |m|
hash[m[0].to_sym] = m[1]
end
hash # => {:stats=>"{<%=t('Payment Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>\n<%=t('Contract Total($)') %>: <%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract).sum(:contract_amount)), :precision => 2) %>}", :search=>"{}"}
你能在你的控制器中构建它并用 json 响应吗?