英文:
golang : how to convert type interface {} to array
问题
我有一个包含对象的 JSON 数组存储在 Redis 中,我想要遍历它,但是当我获取数据时,类型是 interface{},所以无法使用 range 遍历 interface{} 类型。
array := redis.Do(ctx, "JSON.GET", "key")
arrayResult, e := array.Result()
if e != nil {
log.Printf("无法使用命令获取 JSON 数据 %s", e)
}
for _, i := range arrayResult {
fmt.Printf(i)
}
英文:
I have a JSON array with objects in Redis that I want to loop through it, but when I fetch the data, the type is interface{}, so I cannot range over type interface{}
array := redis.Do(ctx, "JSON.GET", "key")
arrayResult, e := array.Result()
if e != nil {
log.Printf("could not get json with command %s", e)
}
for _, i := range arrayResult {
fmt.Printf(i)
}
答案1
得分: 0
我相信你应该能够这样做:
for _, i := range arrayResult.([]byte) {
// 在这里进行操作
}
英文:
I believe you should be able to do
for _, i := range arrayResult.([]byte) {
// do work here
}
答案2
得分: 0
谢谢大家,我找到了一个解决方案。首先,我需要将arrayResult转换为字节。然后,我将其解组为一个结构体,这样我就可以对其进行遍历。
array := redis.Do(ctx, "JSON.GET", "key")
arrayResult, e := array.Result()
if e != nil {
log.Printf("无法使用命令获取JSON %s", e)
}
byteKey := []byte(fmt.Sprintf("%v", arrayResult.(interface{})))
RedisResult := struct{}
errUnmarshalRedisResult := json.Unmarshal(byteKey, &RedisResult)
if errUnmarshalRedisResult != nil {
log.Printf("无法解组消息 %s", errUnmarshalRedisResult)
}
for _, i := range RedisResult {
fmt.Printf(i)
}
希望对你有帮助!
英文:
Thank you guys, I found a solution. so at first I needed to convert the arrayResult to byte. Then I unmarshal it into a strcut, so now I am able to range over it.
array := redis.Do(ctx, "JSON.GET", "key")
arrayResult, e := array.Result()
if e != nil {
log.Printf("could not get json with command %s", e)
}
byteKey := []byte(fmt.Sprintf("%v", arrayResult.(interface{})))
RedisResult := struct{}
errUnmarshalRedisResult := json.Unmarshal(byteKey, &RedisResult)
if errUnmarshalRedisResult != nil {
log.Printf("cannot Unmarshal msg %s", errUnmarshalRedisResult)
}
for _, i := range RedisResult {
fmt.Printf(i)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论