如何重载float的json反序列化?

时间:2019-02-23 18:34:56

标签: json ruby json-deserialization

我尝试获取如何反序列化json

 '{…, "money":{"amount":1.45674,"currency":"ETH"}, …}'
使用我自己的函数

到我的自定义类或结构等。目标是将浮点数转换为整数而没有舍入错误,并且我想根据货币名称使用自己的货币类。因此,在转换过程中一定不能干扰BigDecimal或其他数字。

或者说1.45674可以用引号引起来,在这种情况下这不是问题。

1 个答案:

答案 0 :(得分:1)

如果您使用的是JSON from the Ruby standard library,则以下内容应使Ruby使用您的类:

  • 使用您的类名的值(例如json_class)向JSON对象添加一个'{"json_class":"Money::Ethereum","amount":1.45674}'密钥
  • 在名为json_create的类中添加一个基于JSON数据(例如new(json_data['amount']))创建对象的类方法
  • 进行解析时,请添加“ create_additions”选项:JSON.parse(json_string, create_additions: true)

您可以在JSON extension for Range中看到一个示例,该示例具有一个json_create类方法,以及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