構造があります
type tySurvey struct {
Id int64 `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
HTMLページにJSONバイトをjson.Marshal
書き込みます。 jQueryはオブジェクトのname
フィールドを変更し、jQuery JSON.stringify
を使用してオブジェクトをエンコードし、jQueryはGoハンドラーに文字列を送信します。
id
フィールドは文字列としてエンコードされます。
送信済み:{"id":1}
受信済み:{"id":"1"}
問題は、id
が整数ではなくなったため、json.Unmarshal
がそのJSONの非整列化に失敗することです。
json: cannot unmarshal string into Go value of type int64
そのようなデータを処理する最良の方法は何ですか?すべてのフィールドを手動で変換したくありません。コンパクトでバグのないコードを書きたいです。
引用はそれほど悪くはありません。 JavaScriptはint64ではうまく機能しません。
Int64値の文字列値でJSONを非整列化する簡単な方法を学びたいと思います。
これは、次のようにタグに,string
を追加することで処理されます。
type tySurvey struct {
Id int64 `json:"id,string,omitempty"`
Name string `json:"name,omitempty"`
}
これは、 Marshal のドキュメントの中ほどにあります。
エンコード時にのみ使用されるため、omitempty
を指定して空の文字列をデコードすることはできません。
送信済み:{"id":1}受信済み:{"id": "1"}
これを修正しましょう。
あなたのケースは-> http post 'localhost:8080/users/blahblah' id = 1
-> http post 'localhost:8080/users/blahblah' id:= 1に変更します
「json:id、string」を実行する必要はありません。「json:id」だけで十分です。がんばろう!