
Go で JSON を解析するときに Int64 値を保持する
int64 値を持つオブジェクトの配列を含む JSON POST リクエストを処理する場合、変換の問題がよく発生します。 JSON.Unmarshal はこれらの値を float64 に自動的に変換しますが、これは不便な場合があります。この記事では、元の int64 値を保持するための解決策について説明します。
解決策 1: Number 型を使用する
json.Decoder 型には、数値をデコードできる UseNumber メソッドが含まれています。カスタムタイプに変換します。 JSON 数値リテラルを表す Number 型を定義すると、簡単に int64 に変換し直すことができます。
1 2 3 4 5 6 7 8 9 10 11 12 | 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: カスタム構造にデコードする
に合わせた特定の構造に直接デコードすることもできます。データ:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 サイトの他の関連記事を参照してください。