如何在rails 3.2中将复杂的字符串转换为Hash?

时间:2013-12-05 22:08:25

标签: ruby-on-rails ruby

以下是complex_string,我们希望将其转换为哈希{:stats => str1,:search => STR2}:

:stats =>  {<%=t('Payment Total($)') %>:&nbsp;&nbsp;<%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>
<%=t('Contract Total($)') %>:&nbsp;&nbsp;<%= 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转换成哈希?感谢。

2 个答案:

答案 0 :(得分:1)

这是适用于该特定情况的代码:

complex_string = ":stats =>  {<%=t('Payment Total($)') %>:&nbsp;&nbsp;<%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>
<%=t('Contract Total($)') %>:&nbsp;&nbsp;<%= 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($)') %>:&nbsp;&nbsp;<%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract => :payments).sum(:paid_amount)), :precision => 2) %>\n<%=t('Contract Total($)') %>:&nbsp;&nbsp;<%= number_with_precision(number_with_delimiter(@s_s_results_details.models.joins(:contract).sum(:contract_amount)), :precision => 2) %>}", :search=>"{}"}

答案 1 :(得分:0)

你能在你的控制器中构建它并用json回复吗?