2 回答
TA贡献1995条经验 获得超2个赞
JSON 与 Javascript 一样,在整数和数字之间没有区别。
如果 Dart 的处理方式1234.00与 不同1234,那么它正在对JSON 规范不支持的值做出假设。
虽然 Go 确实正确地封送了float64,但解决 Dart 假设问题的一种方法是在您自己的类型上实现Marshaler 接口:
type Number float64
func (n Number) MarshalJSON() ([]byte, error) {
// There are probably better ways to do it. It is just an example
return []byte(fmt.Sprintf("%f", n)), nil
}
然后您可以在您将编组的结构中使用您自己的Number类型,而不是float64。通过这种方式,您可以确保您的数字始终使用小数点进行编组。
TA贡献1775条经验 获得超11个赞
以下似乎是(对我而言)解决方案。整数方法 toDouble() 也适用于“num”(反之亦然)。在我看来,在处理可能被 Dart 解释为 double 或 int 的 json 和货币值时,有必要使用“as num”,然后使用内置方法 toDouble()。
示例(去):
type cuAcctRow struct {
.....
D_AcctBal float64
.....
}
if baJsAcctDet, oOsError = json.Marshal(uAcctRow); oOsError != nil {
示例(飞镖):
Map mAcctData = json.parse(sResponse);
double dAcctBal = (mAcctData['D_AcctBal'] as num).toDouble();
我不知道为什么 Dart 不允许直接将整数赋值为 double,但我确信这是有充分理由的。
- 2 回答
- 0 关注
- 288 浏览
添加回答
举报