Ruby 如何转换哈希符号

Ruby 如何转换哈希符号,ruby,regex,hash,Ruby,Regex,Hash,我有一个杂烩: {:name=>"testname", :data=>"[209.04, 110.97, 38.83, 234.18]"} 我想将其转换为: {name: "testname", data: [209.04, 110.97, 38.83, 234.18]} 我觉得您想将Ruby数组转换为JavaScript: require 'json' # parse the string to get the included JSON hash = { :name =&g

我有一个杂烩:

{:name=>"testname", :data=>"[209.04, 110.97, 38.83, 234.18]"}
我想将其转换为:

{name: "testname", data: [209.04, 110.97, 38.83, 234.18]}

我觉得您想将Ruby数组转换为JavaScript:

require 'json'

# parse the string to get the included JSON
hash = { :name => "testname", :data => "[209.04, 110.97, 38.83, 234.18]" }
hash[:data] = JSON.parse(hash[:data])

# hash look like this now
# { :name => "testname" , :data => [209.04, 110.97, 38.83, 234.18] }

# translate to json to use with highchart:
hash.to_json
#=> { "name": "testname", "data": [209.04,110.97,38.83,234.18] }

当你说你想创造像

[209.04, 110.97, 38.83, 234.18]
您首先需要决定希望数字具有什么数据类型。如果您只使用Ruby <代码> 209.04 ,类型是“代码>浮点< /COD>”,但是根据您将要处理的数据,您可以考虑使用<代码> BigDecimal <代码> >

以下是获取浮点数组的解决方案:

myhash = {:name=>"testname", :data=>"[209.04, 110.97, 38.83, 234.18]"}
myhash[:data] = myhash[:data][1..-2].split(/,\s*/).map(&:to_f)
如果您更喜欢BigDecimal,它将如下所示:

require 'bigdecimal'
myhash = {:name=>"testname", :data=>"[209.04, 110.97, 38.83, 234.18]"}
myhash[:data] = myhash[:data][1..-2].split(/,\s*/).map { |string| BigDecimal.new(string) }

你的问题不是很清楚,而且看起来你不理解Ruby的哈希以及它们是如何显示的。调解这些问题:

hash = {a:1}
hash # => {:a=>1}
散列
有一个符号
:一个
作为其键。检查时,Ruby使用
=>
表示法显示哈希,因此
{a:1}
显示为
{:a=>1}
。这是相同的散列,只是第二种是显示符号键和非符号键的原始方式:

hash = {a:1, 'b' => 2}
hash # => {:a=>1, "b"=>2}
继续

转换
:data
值可以通过多种方式完成,但我会这样做:

hash = {name: "testname", data: "[209.04, 110.97, 38.83, 234.18]"}
hash[:data] # => "[209.04, 110.97, 38.83, 234.18]"

require 'json'
JSON[hash[:data]] # => [209.04, 110.97, 38.83, 234.18]
数据看起来像是一个JSON编码的浮点数数组,所以请这样对待它

综上所述:

hash[:data] = JSON[hash[:data]]
hash # => {:name=>"testname", :data=>[209.04, 110.97, 38.83, 234.18]}
此时,
散列
相当于:

{name: "testname", data: [209.04, 110.97, 38.83, 234.18]} # => {:name=>"testname", :data=>[209.04, 110.97, 38.83, 234.18]}

在Ruby中,两个哈希版本是相同的。你为什么要改变这个?你想达到什么目标?关于字符串中的数组,保存时假定
数据
字符串始终包含有效的JSON?
hash[:data]=eval(hash[:data])
?但是,eval不是一个安全的操作,可能会导致许多恶意攻击。我想在highchart柱形图中部署第二种格式的值。series块需要第二种格式的值您需要JSON作为输出吗?你能在问题中说明这一点吗?