web-dev-qa-db-ja.com

int64型のGo値に文字列を非整列化できません

構造があります

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を非整列化する簡単な方法を学びたいと思います。

31
Max

これは、次のようにタグに,stringを追加することで処理されます。

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

これは、 Marshal のドキュメントの中ほどにあります。

エンコード時にのみ使用されるため、omitemptyを指定して空の文字列をデコードすることはできません。

53
Dmitri Goldring

送信済み:{"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」だけで十分です。がんばろう!

0