Rails to_json响应,将日期时间转换为unix时间戳



我用rails创建了一个REST API,并使用.to_json将API输出转换为json响应。例如:@response.to_json

响应中的对象包含created_at和updated_at字段,都是日期时间

在JSON响应中,这两个字段都被转换为字符串,这比unixtimestamp的解析成本更高。

是否有一种简单的方法可以将created_at和updated_at字段转换为unixtimestamp,而无需遍历@response中的整个对象列表?

(更新)danielM的解决方案工作,如果它是一个简单的。to_json。但是,如果我有一个.to_json(:include=>:object2),则as_json将导致响应不包含object2。对此有什么建议吗?

在响应模型上定义as_json方法。每当您将响应模型的实例作为JSON返回到REST API时,该脚本就会运行。

def as_json(options={})
    {
        :id => self.id,
        :created_at => self.created_at.to_time.to_i,
        :updated_at => self.updated_at.to_time.to_i
    }
end

你也可以显式调用as_json方法来获取哈希值,并在其他地方使用它。

hash = @response.as_json

Unix时间戳引用:Ruby/Rails:将Date转换为Unix时间戳

编辑:as_json方法也适用于关系。只需将键添加到函数返回的散列中。这也将运行关联模型的as_json方法。

def as_json(options={})
    {
        :id => self.id,
        :created_at => self.created_at.to_time.to_i,
        :updated_at => self.updated_at.to_time.to_i,
        :object2 => self.object2,
        :posts => self.posts
    }
end

此外,您可以向方法传递参数来控制如何构建哈希。

def as_json(options={})
    json = {
        :id => self.id,
        :created_at => self.created_at.to_time.to_i,
        :updated_at => self.updated_at.to_time.to_i,
        :object2 => self.object2
    }
    if options[:posts] == true
        json[:posts] = self.posts
    end
    json
end
hash = @response.as_json({:posts => true})

相关内容

  • 没有找到相关文章

最新更新