如何从Golang中的一组嵌套结构中获取泛型结构

时间:2018-10-09 09:03:19

标签: go

在我的应用程序中,我需要发出两个不同的REST请求,其中包含JSON作为有效负载。现在,对于两个不同的JSON API基本块,其通用结构如下所示

{
    "request": {
        "data": {
            "Object": [
                {
                    <Payload based on API>
                }
            ]
        }
    }
}

为实现这一点,我在下面的两个不同的程序包中编写了代码

auth.go

package auth

type ReqJSONAuth struct {
    Request struct {
        Data struct {
            Object []Object `json:"Object"`
        } `json:"data"`
    } `json:"request"`
}


type Object struct {
    User User `json:"user"`
}

type User struct {
    CustomerID string  //`json:"customerid"`
    IPAddress string  `json:"pbxaddress"`
    NoOfUsers  string  //`json:"noofusers"`
}

func (j *ReqJSON) User() []User     { return j.Request.Data.Object.User } 
func (j *ReqJSON) SetUsers(u []User) { j.Request.Data.Object.User = u }
func main() {
    var j ReqJSON
    j.SetUser(User{
            UserID:    "_id",
            IPAddr:    "1.1.1.1",
            Noofusers: "100",
            Qos:       "34",
            ID:        "kldjflkdfjlkdjfkld",
            Domain:    "xyz.com",
    })

    b, err := json.MarshalIndent(j, "", "  ")
    fmt.Println(err, string(b))
}

metadata.go

package metadata

type ReqJSONMeta struct {
    Request struct {
        Data struct {
            Object []Object `json:"Object"`
        } `json:"data"`
    } `json:"request"`
}

type Object struct {
    Meta Meta `json:"metadata"`
}

type Meta struct {
    CustomerID            string `json:"customerId"`
    FilePath              string `json:"filePath"`
    FileName              string `json:"fileName"`
}
func (j *ReqJSONMeta) User() []User     { return j.Request.Data.Object.User } 
func (j *ReqJSONMeta) SetUsers(u []User) { j.Request.Data.Object.User = u }

以上代码可以正常工作,但我想对其进行重构以使其更加干净和通用,以便将来我们可以在当前框架中添加更多API。 我怎么能达到同样的目的。

0 个答案:

没有答案