在铁轨中解析JSON钥匙值对以格式化日期



我试图通过迭代 @data json格式的输入所示。

 @data= JSON.parse(request,symbolize_names: true)[:data]
 @data   = @data.each{ |key,val| k = Date.parse(key).strftime("%Y %m") }

但是,这样它显示了错误"符号无隐式转换为字符串"。有人可以帮忙吗?

如果您在键是符号的哈希上进行迭代,则错误正在告诉您问题所在。为了解析日期,您必须将字符串作为参数传递,并且由于您没有转换此类对象,因此您会收到错误。

尝试使用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是您真实数据的近似值。

最新更新