2017-11-22 2 views
0

Ich entpacke eine JSON-Antwort in eine Struktur. Für eines der Felder gibt es ein int und eine Zeichenfolge zurück, wenn sie leer ist.JSON-Antwort ist int, aber Zeichenfolge, wenn leer

type example struct {  
    Position int `json:"position"` 
} 

json: cannot unmarshal string into Go struct field .position of type int 

Die Antwort ist entweder

{"position":8} or {"position":"none"} 

Wie kann ich behandeln sowohl eine int und String Antwort?

+1

https://golang.org/pkg/encoding/json/#Number Tipp: Immer das ganze Paket Dokumentation lesen. – Volker

+0

Wenn das Feld 'position' im JSON immer innerhalb eines doppelten Zitats steht (wie' '18''), ändern Sie einfach das Tag in' json: "position, string" '. Andernfalls müssen Sie die UnmarshalJSON-Methode implementieren. –

+0

Danke Jungs! Ich werde in diese Optionen schauen – 1mmerse

Antwort

0

Ändern Sie den Typ in interface{}, und dann können Sie den Typ zur Laufzeit überprüfen.

type example struct {  
    Position interface{} `json:"position"` 
} 
/* 
Returns an int and a bool, indicating if a position exists. 
*/ 
func (e * example) getValue() (int,bool){ 
    if v,ok := Position.(int) { 
     return v,true 
    } else { 
    return 0,false 
    } 
} 
+0

Danke Hein! – 1mmerse

Verwandte Themen