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

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

Mary-Kate Olsen
リリース: 2024-12-14 16:36:18
オリジナル
625 人が閲覧しました

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 に変換し直すことができます。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート