如何重载json float的反序列化?
How to overload json deserialization of float?
我尝试了解如何反序列化 json 就像
'{…, "money":{"amount":1.45674,"currency":"ETH"}, …}'
我的自定义 class 或结构或其他任何东西,使用我自己的函数。目标是将浮点数转换为整数而不出现舍入错误,我想使用我自己的钱 classes,具体取决于货币名称。所以在转换过程中一定不能干扰BigDecimal或其他数字。
或者 1.45674 可以在引号内,在这种情况下这不是问题。
如果您使用的是 JSON from the Ruby standard library,则以下应使 Ruby 使用您的 class:
- 向 JSON 对象添加一个
json_class
键,值为您的 class 名称(例如,'{"json_class":"Money::Ethereum","amount":1.45674}'
)
- 向名为
json_create
的 class 添加一个 class 方法,该方法基于 JSON 数据创建一个对象(例如,new(json_data['amount'])
)
- 解析时,添加"create_additions"选项:
JSON.parse(json_string, create_additions: true)
你可以在 JSON extension for Range
中看到一个例子,它有一个 json_create
class 方法,以及 as_json
和 to_json
实例输出可以反馈到 json_create
.
的值的方法
require 'json/add/range'
output = (0..10).to_json
JSON.parse(output, create_additions: true) # Returns the range 0..10
我尝试了解如何反序列化 json 就像
'{…, "money":{"amount":1.45674,"currency":"ETH"}, …}'
我的自定义 class 或结构或其他任何东西,使用我自己的函数。目标是将浮点数转换为整数而不出现舍入错误,我想使用我自己的钱 classes,具体取决于货币名称。所以在转换过程中一定不能干扰BigDecimal或其他数字。
或者 1.45674 可以在引号内,在这种情况下这不是问题。
如果您使用的是 JSON from the Ruby standard library,则以下应使 Ruby 使用您的 class:
- 向 JSON 对象添加一个
json_class
键,值为您的 class 名称(例如,'{"json_class":"Money::Ethereum","amount":1.45674}'
) - 向名为
json_create
的 class 添加一个 class 方法,该方法基于 JSON 数据创建一个对象(例如,new(json_data['amount'])
) - 解析时,添加"create_additions"选项:
JSON.parse(json_string, create_additions: true)
你可以在 JSON extension for Range
中看到一个例子,它有一个 json_create
class 方法,以及 as_json
和 to_json
实例输出可以反馈到 json_create
.
require 'json/add/range'
output = (0..10).to_json
JSON.parse(output, create_additions: true) # Returns the range 0..10