【问题标题】:Rails bigint with as_json truncated带有 as_json 的 Rails bigint 被截断
【发布时间】:2017-02-23 05:51:15
【问题描述】:

当通过 as_json 运行时,模型中具有 1456299399553483799 等值的 Bigint 列会转换为 1456299399553483800 等内容。

在序列化 bigint 以避免截断时,是否有一种简单/内置的方法可以将数字转换为字符串?

【问题讨论】:

  • 这很有趣。如果你在上面找到任何东西,请分享。

标签: ruby-on-rails json activerecord


【解决方案1】:

一种可能的解决方案——我添加了以下代码作为初始化程序:

# config/initializers/bigint_serializer.rb

class Integer
  def as_json(options = nil)
    self > 2147483647 ? self.to_s : self
  end
end

这会覆盖 https://github.com/rails/rails/blob/v5.1.4/activesupport/lib/active_support/core_ext/object/json.rb#L95Numeric#as_json 的默认行为,并导致大于 4 字节有符号最大 int 的数字被转换为字符串。

注意,我很确定在切换到字符串之前,您实际上可以使用更大的 int 值——也许是 9007199254740991,但我将其保留为最大 4 字节 int,因为我不需要更小的 int 作为 int (见What is JavaScript's highest integer value that a Number can go to without losing precision?

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 2017-03-08
    • 2013-04-26
    • 2021-03-07
    • 2014-06-16
    相关资源
    最近更新 更多