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

问题描述 投票:0回答:2

这是一个

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
转换成哈希?

ruby-on-rails ruby
2个回答
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=>"{}"}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.