问题
I have struct
type tySurvey struct {
Id int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
I do json.Marshal
write JSON bytes in HTML page. jQuery modifies name
field in object and encodes object using jQueries JSON.stringify
and jQuery posts string to Go handler.
id
field encoded as string.
Sent: {"id":1}
Received: {"id":"1"}
Problem is that json.Unmarshal
fails to unmarshal that JSON because id
is not integer anymore.
json: cannot unmarshal string into Go value of type int64
What is best way to handle such data? I do not wish to manually convert every field. I wish to write compact, bug free code.
Quotes is not too bad. JavaScript does not work well with int64.
I would like to learn the easy way to unmarshal json with string values in int64 values.
回答1:
This is handled by adding ,string
to your tag as follows:
type tySurvey struct {
Id int64 `json:"id,string,omitempty"`
Name string `json:"name,omitempty"`
}
This can be found about halfway through the documentation for Marshal.
Please note that you cannot decode the empty string by specifying omitempty
as it is only used when encoding.
回答2:
Sent: {"id":1} Received: {"id":"1"}
Let's fix this.
Your case is -> http post 'localhost:8080/users/blahblah' id=1
Change it to ->
http post 'localhost:8080/users/blahblah' id:=1
No need to do "json:id,string"
thing, Just "json:id"
is enough.
Good luck!
来源:https://stackoverflow.com/questions/21151765/cannot-unmarshal-string-into-go-value-of-type-int64