我写了这个示例代码(https://play.golang.org/p/u_oz5X4aU07):
func main() {
var obj interface{}
json.Unmarshal([]byte("[[1,2],[3,4]]"), &obj)
val := obj.([][]int)
fmt.Println(val)
}
为什么我收到错误:
接口转换:interface {}是[] interface {},而不是[] [] int
是否有一种简单的方法可以在一片切片中转换obj?
这段代码有效,但我想要更紧凑和高效的东西。
var val [][]float64
for r, v := range obj.([]interface{}) {
val = append(val,nil)
for _, w := range v.([]interface{}) {
val[r] = append(val[r], w.(float64))
}
}
答案 0 :(得分:0)
不,最终您将不得不遍历两个切片!
您可以在这里阅读为什么不能仅将一个用作另一个:
https://research.swtch.com/interfaces
此答案也可能有用:
Why golang struct array cannot be assigned to an interface array
本质上是因为接口存储为2个单词对,一个定义了类型,一个定义了值。
您必须通过访问for-range循环中的所有值来手动转换为所需的类型。