int64 値を持つオブジェクトの配列を含む JSON POST リクエストを処理する場合、変換の問題がよく発生します。 JSON.Unmarshal はこれらの値を float64 に自動的に変換しますが、これは不便な場合があります。この記事では、元の int64 値を保持するための解決策について説明します。
解決策 1: Number 型を使用する
json.Decoder 型には、数値をデコードできる UseNumber メソッドが含まれています。カスタムタイプに変換します。 JSON 数値リテラルを表す Number 型を定義すると、簡単に int64 に変換し直すことができます。
func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var dat map[string]interface{} d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() if err := d.Decode(&dat); err != nil { panic(err) } // ... n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) }
解決策 2: カスタム構造にデコードする
に合わせた特定の構造に直接デコードすることもできます。データ:
type A struct { Tags []map[string]uint64 } func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } // ... println(a.Tags[0]["id"]) }
注意:
アプリケーションが IEEE754 倍精度浮動小数点のみをサポートする JavaScript と対話する場合、int64 値の解析の問題が発生する可能性があることに注意してください。 .
以上がGo で JSON を解析するときに Int64 値を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。