如何用 bigints 编组 JSON?
How to marshal JSON with bigints?
我有一个 json
,其中包含一个带有 bigint
的字段
{"NETWORK_ID": 6000370005980500000071}
编组前我的格式是map[string]interface{}
当我编组它并打印到控制台时,一切似乎都很好,但由于它在其他媒体中的大小,这个字段实际上会产生问题,所以我想将它序列化为一个字符串。
UseNumber()
似乎是为了这个目的,但我认为它只是为了解码。
有什么方法可以检测到这种 bigint
数字并将它们序列化为字符串吗?
您需要创建一个实现 json.Marshaler 接口的自定义类型,并编组为一个字符串。示例:
type MyBigInt big.Int
func (i MyBigInt) MarshalJSON() ([]byte, error) {
i2 := big.Int(i)
return []byte(fmt.Sprintf(`"%s"`, i2.String()), nil
}
这将始终将您的自定义类型编组为带引号的十进制数。
我有一个 json
,其中包含一个带有 bigint
{"NETWORK_ID": 6000370005980500000071}
编组前我的格式是map[string]interface{}
当我编组它并打印到控制台时,一切似乎都很好,但由于它在其他媒体中的大小,这个字段实际上会产生问题,所以我想将它序列化为一个字符串。
UseNumber()
似乎是为了这个目的,但我认为它只是为了解码。
有什么方法可以检测到这种 bigint
数字并将它们序列化为字符串吗?
您需要创建一个实现 json.Marshaler 接口的自定义类型,并编组为一个字符串。示例:
type MyBigInt big.Int
func (i MyBigInt) MarshalJSON() ([]byte, error) {
i2 := big.Int(i)
return []byte(fmt.Sprintf(`"%s"`, i2.String()), nil
}
这将始终将您的自定义类型编组为带引号的十进制数。