我想我已经把自己写在了一个角落里。基本上,我有一系列哈希,就像这样。
my_hashes = [{"colorName"=>"first", "hexValue"=>"#f00"}, {"colorName"=>"green", "hexValue"=>"#0f0"},
{"colorName"=>"blue", "hexValue"=>"#00f"}, {"colorName"=>"cyan", "hexValue"=>"#0ff"},
{"colorName"=>"magenta", "hexValue"=>"#f0f"}, {"colorName"=>"yellow", "hexValue"=>"#ff0"},
{"colorName"=>"black", "hexValue"=>"#000"}]
我需要使用JSON.parse最终能够将这些哈希值转换为CSV格式。唯一的问题是我无法让JSON.parse工作只要“=>”符号存在。我试过做一个普通的gsub('=>',':'),但似乎我不能使用它,因为这是一个哈希数组。我尝试过以下方法的变体:
my_hashes.each do |hash|
hash.each do |key, value|
key.gsub!('=>', ':')
value.gsub!('=>', ':')
end
end
我需要这些哈希值保持不变,所以即使我将它们转换为intro字符串,如果我将它们转换回来,它们仍然会有'=>'符号可用。有什么建议吗?
答案 0 :(得分:2)
将=>
更改为:
不会将Ruby哈希变为JSON对象。事实上,你根本不能像这样改变哈希。因为散列的书面表示与内存中的解释版本不同。
但这并不能解决您的问题:您需要JSON
表示Ruby哈希,只需使用to_json
:
my_hashes = [
{"colorName"=>"first", "hexValue"=>"#f00"},
{"colorName"=>"green", "hexValue"=>"#0f0"},
{"colorName"=>"blue", "hexValue"=>"#00f"},
{"colorName"=>"cyan", "hexValue"=>"#0ff"},
{"colorName"=>"magenta", "hexValue"=>"#f0f"},
{"colorName"=>"yellow", "hexValue"=>"#ff0"},
{"colorName"=>"black", "hexValue"=>"#000"}
]
require 'json'
my_hashes.to_json
#=> "[{"colorName":"first","hexValue":"#f00"},{"colorName":"green","hexValue":"#0f0"},{"colorName":"blue","hexValue":"#00f"},{"colorName":"cyan","hexValue":"#0ff"},{"colorName":"magenta","hexValue":"#f0f"},{"colorName":"yellow","hexValue":"#ff0"},{"colorName":"black","hexValue":"#000"}]"
答案 1 :(得分:1)
my_hashes=[{"colorName"=>"first", "hexValue"=>"#f00"}]
new_data = my_hashes.to_json.gsub(/\=\>/, ':')
data = Json.parse new_data