ホームページ >バックエンド開発 >Golang >Go で JSON を解析するときに Int64 値を保持するにはどうすればよいですか?

Go で JSON を解析するときに Int64 値を保持するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 16:36:18608ブラウズ

How to Preserve Int64 Values When Parsing JSON in Go?

Go で JSON を解析するときに Int64 値を保持する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。