我不明白如何比较未编组的 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
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消