gpt4 book ai didi

json - golang DeepEqual : when the type of value of interface map is array, DeepEqual失效

转载 作者:IT王子 更新时间:2023-10-29 02:17:33 27 4
gpt4 key购买 nike

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

为什么当接口(interface)映射有数组(内容为数字如111或数组)时,DeepEqual返回false?当内容值为字符串、映射时,DeepEqual 为真。

最佳答案

打印出有问题的两个值,我们可以看出它们是不同的:

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["content"] 是一个 []string slice ,而 nodeArrayTest["content"] 是一个 []interface{} slice 。由于类型不匹配,reflect.DeepEqual 函数不认为它们相等。

encoding/json 模块解码为 []interface{} slice ,因为 JSON 数组可以包含不同类型的值。

关于json - golang DeepEqual : when the type of value of interface map is array, DeepEqual失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com