如何用 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
}

这将始终将您的自定义类型编组为带引号的十进制数。