gpt4 book ai didi

json - 如何强制接口(interface)对象做一些索引操作?

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

我得到的日志数据源如下所示:

{"LogtypeA":{"content":"listen_logs":[{"useful_key1":val1,"useful_key2":val2},{"useful_key1":val1}]}}

然后我使用 simplejson 来解析它们。 listen_logs 的值是一个包含至少一个映射的 slice 。代码是:

for _, v := range js.Get("LogTypeA").Get("content").Get("listen_logs").MustArray() {
_obj := reflect.ValueOf(v)
fmt.Println(_obj.Kind())
}

如果我将 MustArray() 替换为 Array(),它将报告不正确的变量和常量声明。使用反射模块我会发现 _obj.Kind() 是映射,但我不能使用任何索引方法从 v 获取值,例如:

_val1 := v["useful_key1"]

for i, v := range v {...}

因为 interface{} 类型不支持索引。那么我应该如何从这些日志中提取那些有用的 keyX

最佳答案

您需要对生成的映射执行类型断言:

new_v := v.(map[string]interface{})
_val1 := new_v["useful_key1"]

或者,如果您不确定它会是一张 map :

new_v, ok := v.(map[string]interface{})
if ok {
// it was a map from strings to something
_val1 := new_v["useful_key1"]
} else {
print("Could not interpret v as a map.")
}

由于它最初是一个空接口(interface),即 interface{},这意味着它可以是任何类型。因此,在尝试访问项目之前,您需要指定将其视为 map 。

关于json - 如何强制接口(interface)对象做一些索引操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50151078/

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