Bri*_* Oh 8 json marshalling go unmarshalling dart
使用go1.1.2 Win64,我有一个Go程序,它"编组"包含float64的结构.当float64的值不是整数时,例如.1234.44,然后它被"编组"为浮点数(json.Marshal).然而,当它是一个整数时,例如."1234.00"它被编组为整数"1234".当我在另一端(Dart)收到它时,Dart(30188)将整数视为整数(在地图中 - JSON.decode).因此,当float(double)数据的表示不包含小数点时,Dart程序将中止,并且我尝试将其从地图"提取"为double.
这显然可以通过许多不同的方式解决(例如,转换为整数然后转换回浮点数),但我想知道是否有另一种(更好的)方法来处理这种情况.
有没有比将float64转换为整数更好的方法来处理这个问题?
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
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用你自己的Number
类型,而不是float64
你将要元帅的结构.这样,您可以确保您的数字始终以小数点编组.
在Playground上的工作示例