Json golang DeepEqual:当接口映射的值类型为数组时,DeepEqual为无效

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

为什么当接口映射有数组(内容是数字为111或数组)时,DeepEqual的返回为false?当内容值是一个字符串、一个映射时,DeepEqual为true。

打印出这两个值,我们可以看到它们是不同的:

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"}}