处理包含具有 int64 值的对象数组的 JSON POST 请求时,通常会遇到转换问题。 JSON.Unmarshal 会自动将这些值转换为 float64,这可能很不方便。本文探讨了保留原始 int64 值的解决方案。
解决方案 1:使用数字类型
json.Decoder 类型包含一个 UseNumber 方法,可让您解码数字转换为自定义类型。通过定义表示 JSON 数字文字的 Number 类型,您可以轻松地将其转换回 int64:
func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var dat map[string]interface{} d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() if err := d.Decode(&dat); err != nil { panic(err) } // ... n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) }
解决方案 2:解码为自定义结构
您还可以直接解码为适合您的特定结构data:
type A struct { Tags []map[string]uint64 } func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } // ... println(a.Tags[0]["id"]) }
注意:
请注意,如果您的应用程序与仅支持 IEEE754 双精度浮点的 JavaScript 交互,您可能会遇到 int64 值的解析问题.
以上是在 Go 中解析 JSON 时如何保留 Int64 值?的详细内容。更多信息请关注PHP中文网其他相关文章!