为了账号安全,请及时绑定邮箱和手机立即绑定

合并两个不同的结构

合并两个不同的结构

Go
梦里花落0921 2022-07-18 10:00:47
我有两个名为“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"}]
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

如果您想要在问题中列出的响应,您可以使用通用数组[]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).


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信