2014-01-16 5 views
25

Ich habe structKann nicht Abstellungs String in Go Wert vom Typ int64

type tySurvey struct { 
    Id  int64   `json:"id,omitempty"` 
    Name string   `json:"name,omitempty"` 
} 

ich json.Marshal schreiben JSON Bytes in HTML-Seite. jQuery ändert name Feld in Objekt und codiert Objekt mithilfe von jQueries JSON.stringify und jQuery posten Zeichenfolge an Go-Handler.

id Feld als Zeichenfolge codiert.

Sent: {"id":1} empfangen: {"id":"1"}

Problem ist, dass json.Unmarshal dass JSON entpacken schlägt fehl, weil id nicht mehr ganze Zahl ist.

json: cannot unmarshal string into Go value of type int64 

Was ist der beste Weg, um solche Daten zu verarbeiten? Ich möchte nicht jedes Feld manuell konvertieren. Ich möchte einen kompakten, fehlerfreien Code schreiben.

Zitate ist nicht so schlecht. JavaScript funktioniert nicht gut mit int64.

Ich möchte den einfachen Weg lernen, json mit String-Werten in int64-Werten zu entpacken.

+1

Gibt es eine Möglichkeit zu wissen, welches Feld das Problem verursacht? – franck

Antwort

40

Dies wird durch Hinzufügen ,string zu Ihrem Tag wie folgt behandelt:

type tySurvey struct { 
    Id int64 `json:"id,string,omitempty"` 
    Name string `json:"name,omitempty"` 
} 

Diese auf halber Strecke für Marshal durch die Dokumentation werden.

Bitte beachten Sie, dass Sie die leere Zeichenfolge nicht dekodieren können, indem Sie omitempty angeben, da sie nur beim Codieren verwendet wird.

+0

Das würde funktionieren, wenn 'id' nicht als Ganzzahl kommt. Andernfalls erhalten Sie eine Fehlermeldung "ungültige Verwendung von String struct tag ..." – tsuz