我有一个哈希:
{:name=>"testname", :data=>"[209.04, 110.97, 38.83, 234.18]"}
我想将其转换为:
{name: "testname", data: [209.04, 110.97, 38.83, 234.18]}
答案 0 :(得分:3)
我觉得您希望将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] }
答案 1 :(得分:1)
当您说要创建类似
的内容时[209.04, 110.97, 38.83, 234.18]
首先需要确定数字所需的数据类型。如果您只是使用Ruby 209.04
编写,类型为Float
,但根据您要对数据执行的操作,您可能会考虑使用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) }
答案 2 :(得分:1)
你的问题并不是很清楚,看起来你不了解Ruby的哈希以及它们是如何显示的。调解这些:
hash = {a:1}
hash # => {:a=>1}
hash
的密钥为:a
符号。检查时,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]}
此时hash
相当于:
{name: "testname", data: [209.04, 110.97, 38.83, 234.18]} # => {:name=>"testname", :data=>[209.04, 110.97, 38.83, 234.18]}