gpt4 book ai didi

arrays - 在 Go 中测试值的类型

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

我试图在 Go 中验证 JSON 对象。我正在尝试查看“标签”属性是否是一个数组。(稍后我还想知道另一个属性是否也是一个对象)。

我已经做到了。如果我打印 reflect.TypeOf(gjson.Get(api_spec, "tags").Value() 我得到:

string   // When the field is a string
[]interface {} // When the field is an array
map[string]interface {} // When the field is an object

但是当尝试在下面的代码上测试时:

if ( gjson.Get(api_spec, "tags").Exists() ) {
if ( reflect.TypeOf(gjson.Get(api_spec, "tags").Value()) != "[]interface {}" ) {
// some code here ...
}
}

我收到以下错误代码:

invalid operation: reflect.TypeOf(gjson.Get(api_spec, "tags").Value()) != "[]interface {}" (mismatched types reflect.Type and string)

提前致谢!

最佳答案

使用 type assertion确定值是否为 []interface{}:

v := gjson.Get(api_spec, "tags").Value()
_, ok := v.([]interface{}) // ok is true if v is type []interface{}

这里是问题中的代码,修改为使用类型断言:

if gjson.Get(api_spec, "tags").Exists() {
if _, ok := gjson.Get(api_spec, "tags").Value().([]interface{}); !ok {
// some code here ...
}
}

不需要使用反射。如果您出于某种原因确实想使用反射(而且我在问题中没有看到原因),请比较 reflect.Type 值:

// Get type using a dummy value. This can be done once by declaring
// the variable as a package-level variable.
var sliceOfInterface = reflect.TypeOf([]interface{}{})

ok = reflect.TypeOf(v) == sliceOfInterface // ok is true if v is type []interface{}

run the code on the playground

关于arrays - 在 Go 中测试值的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286352/

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