Crystal JSON 抱怨它无法将 Int 转换为浮点型,下面的代码抛出异常
JSON.parse("{"v":1}")["v"].as_f
如何解析?如果某些值是 Int "1",而某些浮点数是"1.1"?
Crystal 在这里对类型相对严格。你必须更加明确。
选项 1.
实现您自己的方法。我建议使用不同的名称。
struct JSON::Any
def to_f : Float64?
case @raw
when Float64 then @raw.as(Float64)
when Int then @raw.as(Int).to_f
end
end
end
然后,您可以将其称为JSON.parse("{"v":1}")["v"].as_f
选项 2.
在代码中先进行检查。
my_v = JSON.parse("{"v":1}")["v"]
if my_v.as_f?
my_v.as_f
elsif my_v.as_i?
my_v.to_i.to_f
end