为了账号安全,请及时绑定邮箱和手机立即绑定

DeepEqual:为什么未编组的映射返回 DeepEqual() 结果与看似相同的文字不同

DeepEqual:为什么未编组的映射返回 DeepEqual() 结果与看似相同的文字不同

Go
牛魔王的故事 2021-10-25 16:30:04
我不明白如何比较未编组的 JSON。例子:package mainimport (    "fmt"    "reflect"    "encoding/json")func main() {    a := map[string]interface{} {"foo": 1, "bar": 2}    b := map[string]interface{} {"bar": 2, "foo": 1}    fmt.Printf("Literal B is %v, DeepEqual is %v\n", b, reflect.DeepEqual(a, b))    err := json.Unmarshal([]byte(`{"bar": 2, "foo": 1}`), &b)    if err != nil {        panic("Could not unmarshal")    }    fmt.Printf("Umarshalled B is %v, DeepEqual is %v\n", b, reflect.DeepEqual(a, b))}印刷文字 B 是 map[bar:2 foo:1],DeepEqual 为真Umarshalled B 是 map[bar:2 foo:1],DeepEqual 是假的在 JSON 解组之后,从文字初始化的 B 和 B 有什么不同?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这回答了你的问题:


fmt.Printf("%T\n", b["foo"]) // Prints "float64" after unmarshaling.

JSON 数字是 64 位浮点数,而您的原始地图值是整数。从文档:


要将 JSON 解组为接口值,Unmarshal 将其中之一存储在接口值中:


bool, for JSON booleans

float64, for JSON numbers

string, for JSON strings

[]interface{}, for JSON arrays

map[string]interface{}, for JSON objects

nil for JSON null


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信