2017-11-22 2 views
-1

私は、以下のように、@data jsonフォーマットの入力を繰り返して日付をフォーマットしようとしています。日付をフォーマットするためのRailsのjsonキーの値のペアを解析します。

@data= JSON.parse(request,symbolize_names: true)[:data] 

@data = @data.each{ |key,val| k = Date.parse(key).strftime("%Y %m") } 

しかし、それは「文字列への記号のない暗黙の型変換」エラーを示していないこの方法。誰でも助けてくれますか?

答えて

2

キーがシンボルであるハッシュを反復処理している場合、エラーはどこに問題があるのか​​を伝えています。日付を解析するには、引数として文字列を渡す必要があります。そのようなオブジェクトを変換していない場合は、エラーが発生しています。

文字列に記号を変換するには、to_sを使用してみてください:

@data.each do |key, _| 
    puts Date.parse(key.to_s).strftime '%Y %m' 
end 

(注)ブロックの中にいる、とあなたはあなたができる、その後、あなたが作成しているk変数を使用するつもりはない場合それを作成しないでください、それはブロックの外で利用できません。あなたは解析された日付を印刷しています。

ブロック変数valueを使用しない場合は、省略することができます。尖った@muとして、あなたはsymbolize_names: trueを省略することができ、そしてこの方法は、キーが文字列になります

、その後、変換は必要ありません。

require 'date' 
require 'json' 

request = '{ 
    "data": { 
    "2017-11-22 00:22:26": "foo" , 
    "2017-11-22 00:22:27": "bar" 
    } 
}' 
@data = JSON.parse(request)['data'] 
@data.each do |key, _| 
    puts Date.parse(key).strftime '%Y %m' 
end 

requestは、あなたの実際のデータに近似です。

+1

また、 'symbolize_names:true'を実行しないでキーを文字列として残しておくと、文字列として処理されるためです。 '@data = @ data.each {...}'は何も役に立ちません。なぜなら、 'each'がその受信機を返すからです。 –

+0

@muistooshortを指摘してくれてありがとう。 –

+0

私は外出先で日付をフォーマットし、同じオブジェクトに格納したいと思います。それは可能ですか? @SebastianPalma – Wings2fly

関連する問題