2016-08-04 31 views
0

Ich habe eine Abfrage, die in eine Struktur umwandelt. Aber wenn die Abfrage keine Ergebnisse zurückgibt, ist die Antwort null - wie bekomme ich dies ein leeres Array []?Empty Struct on Response

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

Antwort, wenn keine Ergebnisse:

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

gewünschte Antwort, wenn keine Ergebnisse:

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

Noch immer null - mein struct Setup ist:

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

Ich bin mit response.DevTeam = []models.DevTeam{} wie unten vorgeschlagen, aber immer noch null.

Antwortabschnitt:

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

Antwort

1

Ein Wert von Slice-Typ nil codiert als null JSON-Objekt zu sein. Eine leere Scheibe wird in ein leeres Array [] gemarshallt.

Vor response Marshalling, überprüfen Sie die DevTeam Feld, und wenn es nil ist, explizit ein Stück Wert mit 0 Länge eingestellt, zB:

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

Oder alternativ, wenn Sie Ihre gin.H Wrapper erstellen, eine leere Scheibe verwenden, anstatt von response.DevTeam, wenn letzterer nil entspricht.

dieses einfache Beispiel Siehe:

type Pt struct { 
    DevTeam []string 
} 

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

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

Output (versuchen Sie es auf dem Go Playground):

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

oben für mein Setup sehen –

+0

@ElliotReeve Du bist immer noch nicht alles zeigen. Woher kommt das "meta" im Ergebnis zum Beispiel JSON? – icza

+0

Ich habe aktualisiert, um die Meta-Abschnitt und c.JSON Ausgabe –