我正在Rails 2.3.2 to_json中序列化ActiveRecord模型,并注意到BigNum值已序列化为JSON,但没有引号,但是,javascript使用64位来表示大数,并且这些位中只有〜52(?)可用于整数部分,其余部分用于指数计算。

所以我的17位数字四舍五入,grrr。

在Firebug控制台中尝试以下操作:

console.log(123456789012345678)


因此,我认为json编码器应该足够聪明,以引用对于javascript引擎无法处理的数字。我该如何固定导轨呢?或者,是否有一种方法可以覆盖模型上单个属性的编码(我不想在其他地方使用to_s)?

谢谢。

最佳答案

我已经根据另一篇文章提出了一个可行的解决方案:Array of ActiveRecords to JSON

  def to_json(options = {})
     hash = Serializer.new(self, options).serializable_record.reject {|key, value| value.nil? || key == "big_num_field"}
     hash[:big_num_field] = big_num_field.to_s
     hash.to_json
   end


这仍然不是最佳选择,因为我宁愿让序列化程序自动处理。

10-05 20:52