如果我有一个 json 数据结构,其中abc键存储相同数据类型的元素数组,那么我可以像这样获取这些元素:
package main
import (
"encoding/json"
"fmt"
)
// var s = `{"abc":[["a"], [-0.0025], ["2022-09-20 15:20:06"], [null], [1663676406219]]}`
var s = `{"abc":["a", "b", "c", "d", "e"]}`
func main() {
var f map[string]interface{}
if err := json.Unmarshal([]byte(s), &f); err != nil {
panic(err)
}
d := []string{}
for key := range f {
d = append(d, key)
}
f1 := f[d[0]].([]interface{}) // т.е. f1 := f["abc"].(map[string]interface{})
m := []string{}
for h := range f1 {
m = append(m, f1[h].(string))
}
fmt.Println("m = ", m)
for i := 0; i < len(m); i++ {
fmt.Println(m[i])
}
}
m = [a b c d e]
a
b
c
d
e
如果我有一个key数组,其中元素具有不同的数据类型,如上面的代码所示,那么就不可能显示这样的数据。这些不同数据类型的顺序不是恒定的。
对于此类数组包含相同类型的元素的情况,例如string,在循环内它的工作方式如下:
m = append(m, f1[h].([]interface{})[0].(string))
- - - - - - - - - - - - - - - - - - - - - - - -
f1 = [[a] [b] [c] [d] [e]]
a
b
c
d
e
请告诉我如何获取这种情况的元素:
1. var s = `{"abc":[["a"], [-0.0025], ["2022-09-20 15:20:06"], [null], [1663676406219]]}`
如果我在数组中有多个元素并且它们也属于不同类型,如何正确执行此操作:
2. var s = `{"abc":[[33, "a"], [48, -0.0025], [55, "2022-09-20 15:20:06"], [77, null], [88, 1663676406219]]}`
要在嵌套数组的情况下获取元素,请表示
f1[h]
为嵌套数组[]interface{}
:在这种情况下,接口的字符串表示由函数处理
fmt.Sprint
。如果您想自己处理嵌套数组的每个元素,请使用type switch: