2016-08-10 11 views
-2

私は自分自身をコーナーに書いたと思います。基本的に、私はハッシュの配列を持っています。gsubを使用して、ハッシュの配列内の "="を ":"に置き換えます。

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"}] 

私は最終的にはCSV形式にこれらのハッシュを変換することができるようにJSON.parseを使用する必要があります。唯一の問題は、「=>」記号が存在する限り、JSON.parseを動作させることができないことです。私はちょうど通常のgsub( '=>'、 ':')をやってみましたが、これはハッシュの配列なので使用できません。

my_hashes.each do |hash| 
    hash.each do |key, value| 
     key.gsub!('=>', ':') 
     value.gsub!('=>', ':') 
    end 
end 

が、私はそのまま滞在するには、これらのハッシュ値を必要とするので、私は彼らにイントロの文字列を変換する場合でも、私はそれらをバック変換ならば、彼らはまだ「=>」必要があります:私は次の方法のバリエーションを試してみました利用可能なシンボル。何かアドバイス?

+3

だけでJSON文字列にそれを変換するために、 'my_hashes.to_json'を使用。最初に 'json'''を必要とするかもしれません。 –

+1

ハッシュをJSONに変換してからCSVに変換するのはなぜですか?なぜ標準ライブラリの['csv'を使ってCSVに直接行かないのですか?](http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/index.html) –

+1

これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。ハッシュを変換する代わりに、何をしようとしているのかを記述し、それを実現するためのよりよい方法を見てみる必要があります。 –

答えて

2

=>から:に変更すると、JSONオブジェクトにRubyハッシュが作成されません。そして、実際には、あなたはちょうどそのようなハッシュを変更することはできません。ハッシュの書かれた表現は、メモリ内の解釈されたバージョンと同じではないからです。

しかし、それはあなたの問題を解決していません:あなたはto_jsonを使用して、Rubyのハッシュの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"}]" 
+0

はい、あなたはまったく正しいです。うまくいけば、私はもう少しJSONを使って作業をしてみました。 –

1
my_hashes=[{"colorName"=>"first", "hexValue"=>"#f00"}] 

new_data = my_hashes.to_json.gsub(/\=\>/, ':') 

data = Json.parse new_data 
+0

ちょうどコードではなく、いくつかの説明を提供することで、この回答を改善することができます。 –

+0

確かに次回は心に留めておきます –

+0

アドバイスありがとうございます! –