2016-08-04 44 views
0

我有一個查詢轉換爲結構。但是,當查詢返回沒有結果時,響應是null - 我怎樣才能得到這個空數組[]響應中的空結構

_, err := dbmap.Select(&response.DevTeam, "SELECT * FROM DevTeam WHERE app_id = ? LIMIT ? OFFSET ?", a_id, limit, offset) 

迴應時,沒有結果:

{ 
    "data": null, 
    "meta": "success" 
} 

期望的反應時沒有任何結果:

{ 
    "data": [], 
    "meta": "success" 
} 

仍然得到空 - 我的結構設置是:

type HttpResonse struct { 
    DevTeam []DevTeam `json:"data"` 
} 

我使用response.DevTeam = []models.DevTeam{}如下所示,但仍然得到null

響應部分:

s.Count = int64(len(response.DevTeam)) 
c.JSON(httpcode, gin.H{"meta": s, "data": response.DevTeam}) 

回答

1

的切片類型是nil值編碼作爲null JSON對象。一個非nil空片段被編組爲一個空陣列[]

編組response之前,請檢查DevTeam領域,如果它是nil,明確設置切片值與0長度,例如:當您創建gin.H包裝,使用空片,而不是

if response.DevTeam == nil { 
    response.DevTeam = []models.DevTeam{} 
} 

或可替代response.DevTeam如果後者等於nil

看到這個簡單的例子:

type Pt struct { 
    DevTeam []string 
} 

p := Pt{} 
json.NewEncoder(os.Stdout).Encode(p) 

p.DevTeam = []string{} 
json.NewEncoder(os.Stdout).Encode(p) 

輸出(嘗試在Go Playground):

{"DevTeam":null} 
{"DevTeam":[]} 
+0

在上面看到我的設置 –

+0

@ElliotReeve你仍然沒有顯示一切。例如,'「meta」'來自JSON結果的位置在哪裏? – icza

+0

我已經更新,以顯示元部分和c.JSON輸出 –