Json golang DeepEqual:当接口映射的值类型为数组时,DeepEqual为无效
为什么当接口映射有数组(内容是数字为111或数组)时,DeepEqual的返回为false?当内容值是一个字符串、一个映射时,DeepEqual为true。打印出这两个值,我们可以看到它们是不同的:Json golang DeepEqual:当接口映射的值类型为数组时,DeepEqual为无效,json,go,Json,Go,为什么当接口映射有数组(内容是数字为111或数组)时,DeepEqual的返回为false?当内容值是一个字符串、一个映射时,DeepEqual为true。打印出这两个值,我们可以看到它们是不同的: package main import ( "encoding/json" "fmt" "reflect" ) func main() { nodeArray := map[string]interface{}{ "meta": map[strin
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
nodeArray := map[string]interface{}{
"meta": map[string]interface{}{
"category": "paragraph"}, "content": []string{"111"}}
// content is number as 111 or array
b, _ := json.Marshal(&nodeArray)
var nodeArrayTest map[string]interface{}
json.Unmarshal(b, &nodeArrayTest)
if !reflect.DeepEqual(nodeArray, nodeArrayTest) {
fmt.Println("!!!! odeArray and nodeArrayTest should be equal")
} else {
fmt.Println("odeArray and nodeArrayTest equal")
}
}
特别是,noderray[“content”]
是一个[]字符串
切片,而noderraytest[“content”]
是一个[]接口{}
切片。由于代码类型不匹配,DePyQual函数不考虑这些值。
encoding/json
模块解码成一个[]接口{}
片,因为json数组可以包含不同类型的值
nodeArray = map[string]interface {}{"meta":map[string]interface {}{"category":"paragraph"}, "content":[]string{"111"}}
nodeArrayTest = map[string]interface {}{"content":[]interface {}{"111"}, "meta":map[string]interface {}{"category":"paragraph"}}
这不是真的。如果nodeArray内容是
[]映射[string]接口{}{map[string]接口{}{aa:“bb”}
,那么nodeArray测试内容中的数据类型是什么?如果您将JSON解码为接口{}
变量,您将获得字符串、整数和布尔值的基本类型,数组的[]接口{}
,和对象的map[string]接口{}
。json.Unmarshal
的文档包含了这一点。请不要只发布两行代码。解释什么是“不真实的”,以及为什么。否则,您的解决方案很难理解。
aaa := map[string]interface {}{"meta":map[string]interface {}{"category":"paragraph"}, "content":[]string{"111","222"}}
bbb := map[string]interface {}{"content":[]string{"222","111"}, "meta":map[string]interface {}{"category":"paragraph"}}