首页 > 解决方案 > 如何在 Go 中迭代 []interface{}

问题描述

我正在努力获取以下接口的键和值,这是 JSON 编组返回的结果的结果,Execute本示例所示

[
    [
        {
            "id": 36,
            "label": "TestThing",
            "properties": {
                "schema__testBoolean": [
                    {
                        "id": 40,
                        "value": true
                    }
                ],
                "schema__testInt": [
                    {
                        "id": 39,
                        "value": 1
                    }
                ],
                "schema__testNumber": [
                    {
                        "id": 38,
                        "value": 1.0879834
                    }
                ],
                "schema__testString": [
                    {
                        "id": 37,
                        "value": "foobar"
                    }
                ],
                "uuid": [
                    {
                        "id": 41,
                        "value": "7f14bf92-341f-408b-be00-5a0a430852ee"
                    }
                ]
            },
            "type": "vertex"
        }
    ]
]

reflect.TypeOf(result)结果:[]interface{}

我用它来循环数组:

s := reflect.ValueOf(result)
for i := 0; i < s.Len(); i++ {
  singleVertex := s.Index(i).Elem() // What to do here?
}

但是我遇到了以下错误:

reflect.Value.Interface:无法返回从未导出的字段或方法获得的值

标签: gointerfacetype-assertion

解决方案


如果您知道那是您的数据结构,则根本没有理由使用反射。只需使用类型断言:

for key, value := range result.([]interface{})[0].([]interface{})[0].(map[string]interface{}) {
    // key == id, label, properties, etc
}

推荐阅读