猿问

合并两个不同的结构

我有两个名为“Invoices”、“Transactions”的结构。这些是 GORM 模型。我想合并这些结构并转换 json。


例子:


type Invoice struct {

     gorm.Model

     DocType string `json:"docType"`

     Total float64 `json:"total"`

}


type Transaction struct {

     gorm.Model

     DocType string `json:"docType"`

     Total float64 `json:"total"`

     Account uint `json:"account"`

}

我想像这样回应;


[

{docType:"invoice", total: "123.00"}

{docType:"transaction", account:"1", total: "124.00"}

{docType:"invoice", total: "125.00"}

]


梦里花落0921
浏览 101回答 1
1回答

繁花不似锦

如果您想要在问题中列出的响应,您可以使用通用数组[]interface{}并将其转换为 JSON。inv1 := Invoice{    DocType: "invoice",    Total:   123.00,}inv2 := Invoice{    DocType: "invoice",    Total:   125.00,}tran := Transaction{    DocType: "transaction",    Total:   124.00,    Account: 1,}bytes, _ := json.Marshal([]interface{}{inv1, tran, inv2})fmt.Println(string(bytes))不管你是用来自gorm的值填充结构还是像我在这里做的那样初始化它们自己都没有关系。阅读评论,您似乎有两个结构切片,您希望将两者合并为一个切片,然后编码为 JSON。你可以这样做:arr1 := []Invoice{inv1, inv2}arr2 := []Transaction{tran}combined := make([]interface{}, 0, len(arr1)+len(arr2))for i := range arr1 {    combined = append(combined, arr1[i])}for i := range arr2 {    combined = append(combined, arr2[i])}bytes, _ := json.Marshal(combined)fmt.Println(string(bytes))在这里,我只是使用自己创建的切片,但这些切片很容易来自 gorm 的db.Find(&arr1).
随时随地看视频慕课网APP

相关分类

Go
我要回答