首页 > 解决方案 > 在哈希到 json 转换过程中格式化 date_time 数组

问题描述

所以我有一个类,其哈希表示看起来像这样。 {"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 期间调用的实现。

标签: rubyhashto-json

解决方案


你不能在Hash#to_json不严重破坏该方法的情况下完成这一部分,因为:

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

相反,您必须修改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生成的对象以获得所需的结果。


推荐阅读