现状如下:
我现在有很多API,每个API的数据都不一样,每个接口我所需要的数据也不一样,所以我针对每一个接口,都写了不同的结构体。现在我获得响应,需要根据不同的API初始化不同的结构体,再把获取的json数据反序列化到这个结构体
问题如下:
由于存在很多API,也就是说很多不同结构体,我在
json.Unmarshal()的时候,必须传interface,但是使用Unmarshal()函数的时候,如果传参是interface,那么一定会反序列化成map格式,这样导致我使用结构体过滤的数据无效。
例子:
type API struct {
    MyTarget    string    `json:"target"`
}
type API2 struct {
    MyTarget2    string    `json:"target2"`
}
type API3 struct {
    MyTarget3    string    `json:"target3"`
}
var APISlice = map[string]interface{}{
    "api":API{},
    "api2":API2{},
    "api3":API3{},
}
func main() {
    data = []byte{}
    str := "api1"    //假设是api1,实际业务我是遍历每一个api的
    myStruct := APISlice[str]
    json.Unmarshal(data,&myStruct)    //此时得到的结果,是一个map,并且响应的结果(即data)全部装进这个map里面了
                                //而我想要的是我已经用结构体定义好的字段,target就是我想要得
}
有疑问加站长微信联系(非本文作者))
						
	


                
								
json.RawMessage解君愁示例代码没看懂你说的是什么问题, data是一个空数组,Unmarshal 以后肯定是nil 啊
如果你用了go1.18版本. 用泛型尝试效果也不错