【发布时间】:2017-07-31 16:40:32
【问题描述】:
我需要将包含一些 BigDecimal 字段的 Ruby 哈希转换为 JSON。
我需要将 BigDecimal 转换为 Float/Integer,但“json”库始终将其转换为科学计数法。
require 'json'
require 'bigdecimal'
obj = {}
obj['created_at'] = BigDecimal('0.12345')
puts "JSON.dump(obj) = #{JSON.dump(obj)}"
puts "JSON.generate(obj) = #{JSON.generate(obj)}"
puts "JSON.fast_generate(obj) = #{JSON.fast_generate(obj)}"
puts "JSON.pretty_generate(obj) = #{JSON.pretty_generate(obj)}"
结果:
JSON.dump(obj) = {"created_at":"0.12345e0"}
JSON.generate(obj) = {"created_at":"0.12345e0"}
JSON.fast_generate(obj) = {"created_at":"0.12345e0"}
JSON.pretty_generate(obj) = {
"created_at": "0.12345e0"
}
有没有可以指定数字格式的 JSON 库,所以当我解析对象时,BigDecimal 字段不会转换为科学计数法?
obj['created_at'] = BigDecimal.new('0.12345')
JSON.parse(obj) = { "created_at": "0.12345" } # not 0.12345e0
我正在使用 ruby 2.4.1p111
【问题讨论】:
-
当您执行
a=BigDecimal('0.12345')和a.to_f之类的操作时会发生什么 -
我知道,但我想知道的是如何让 JSON.parse(a) = 0.12345
-
更新了我的答案
-
您要解决什么问题?
0.12345和0.12345e0都是 valid JSON numbers 代表完全相同的值,任何标准 JSON 解析器都会正确地将它们解析为相同的值。您是否在某处遇到错误? 为什么您需要不同格式的号码?