在散列到 json 的转换期间格式化散列中 date_time 的数组

Format array of date_time in hash during hash to json conversion

所以我有一个 class,其哈希表示如下所示。 {"dateTime"=>[1484719381, 1484719381], "dateTime1"=>[1484719381, 1484719381]} 这里的 dateTime 是一个 unix 格式的 dateTime 数组。

我正在尝试将此散列转换为我正在使用 hash.to_json 的 json_string 的等价物。调用to_json时,有什么方法可以修改date_time的格式吗?结果 json 应如下所示

'{"dateTime1":["2017-01-18T06:03:01+00:00","2017-01-18T06:03:01+00:00"]}'

基本上我正在寻找一个可以在 hash.to_json 期间调用的实现。

你不能在不显着破坏该方法的情况下制作 Hash#to_json 的这一部分,因为:

  • 您需要为多个其他 类
  • 操作 #to_json
  • 那些 Integers 是有效的 JSON 并且更改它会很糟糕
  • 这不是 Ruby 中的 Time 对象的字符串表示形式,因此无论如何您都需要对其进行字符串格式化

相反,您必须修改 Hash 值以以所需方式表示,例如

h= {"dateTime"=>[1484719381, 14848723546], "dateTime1"=>[1484234567, 1484719381]}
h.transform_values do |v| 
  v.map do |int| 
    Time.at(int, in: '+00:00').strftime("%Y-%m-%dT%H:%M:%S%z")
  end 
end
#=> {"dateTime"=>[
#       "2017-01-18T06:03:01+0000", 
#       "2440-07-15T05:25:46+0000"], 
#    "dateTime1"=>[
#       "2017-01-12T15:22:47+0000", 
#       "2017-01-18T06:03:01+0000"]}

然后您可以对生成的对象调用 to_json 以获得您想要的结果。