Golang JSON アンマーシャル エラー: 指数を持つ数値が 0 を返す
JSON データを Go 構造体にアンマーシャルしようとしているときに、ユーザーがエラーに遭遇しました。指数付きの数値が一貫して 0 として解釈される問題。この動作は、予期される型と実際の値の不一致に起因します。たとえば、{"id": 1.2e 8 のような JSON 文字列の場合、"Name": "Fernando"} は、uint64 型の ID フィールドを持つ構造体にアンマーシャリングされ、結果の ID は 0 になります。Solution
この問題を解決するには、構造体のフィールドの型が JSON 文字列のデータの型と一致していることを確認してください。この場合、指数が使用されるため、Id フィールドは float32 または float64 のような浮動小数点型として定義する必要があります。代替解決策
予期された型は JSON 数値形式と互換性がありません。回避策を実装できます。目的の型の「ダミー」フィールドを追加すると、フックを使用して値を実際に期待される型にキャストできます。例:type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
以上が指数を含む数値に遭遇すると Golang JSON アンマーシャル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。