【问题标题】:Format array of date_time in hash during hash to json conversion在哈希到 json 转换过程中格式化 date_time 数组
【发布时间】:2021-08-28 16:10:42
【问题描述】:

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

【问题讨论】:

    标签: ruby hash to-json


    【解决方案1】:

    你不能在不严重破坏该方法的情况下将这部分作为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 以获得您想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2019-10-27
      相关资源
      最近更新 更多