如何使用golang创建嵌套json数组对象

时间:2019-03-04 11:42:12

标签: go gin-gonic

我尝试查询数据库并使用查询结果创建像这样的json

[{“ TransID”:“交易ID1”,ProductID“:[” ProID1“,” ProID2“,” ProID3“,” ProID4“]},

{“ TransID”:“交易ID2”,“产品ID”:[“ ProID5”,“ ProID6”]}]

所以我从中创建类型struct

type DataRecent []struct {
 TransID   string   `json:"transID"`
 ProductID []string `json:"productID"`}

golang代码是

var dataRecent DataRecent
var recent [5]string
for _, Trans := range recent {

    if Trans != "" {
        var TransID, ProductID string

        selectTrans, err := db.Query("select transaction_id, product_id from detail where transaction_id = ?", Trans)

        var arr []string
        for selectTrans.Next() {
            if err != nil {
                panic(err.Error())
            }
            errTrans := selectTrans.Scan(&TransID, &ProductID)
            if errTrans != nil {
                panic(errTrans.Error())
            }
            arr = append(arr, ProductID)
        }
    }
        dataRecent.TransID = Trans
        dataRecent.ProductID = arr

}
    c.JSON(http.StatusOK, gin.H{"status": "success", "message": "Find transactions success", "recent_trans": dataRecent})


defer db.Close()

但是我无法构建代码并出现错误

  

dataRecent.TransID未定义(类型DataRecent没有字段或方法TransID)   dataRecent.ProductID未定义(DataRecent类型没有字段或方法ProductID)

我不知道该怎么办,坚持了一个星期。我是golang的新程序员。请帮我,谢谢

2 个答案:

答案 0 :(得分:2)

创建结构时只需删除数组

type DataRecent struct {
 TransID   string   `json:"transID"`
 ProductID []string `json:"productID"`
}

然后做

var dataRecent []DataRecent

它将为您工作。

答案 1 :(得分:0)

看起来dataRecent尚未初始化。我建议您使用dataRecent := DataRecent{}而不是var dataRecent DataRecent

其他一些见解: 我不确定您是否省略了最近使用的字符串数组的make,或者您不知道需要make()。无论如何,数组是Go中的值,如果您不熟悉Go,我强烈建议您改用slices。 https://blog.golang.org/go-slices-usage-and-internals

此外,我不确定如果发现错误,为什么必须panic()(用戴夫·切尼(Dave Cheney)的话,panic的意思是“人类之上的游戏”-{{3 }})