如何重载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_jsonto_json 实例输出可以反馈到 json_create.

的值的方法
require 'json/add/range'
output = (0..10).to_json
JSON.parse(output, create_additions: true) # Returns the range 0..10