ホームページ >バックエンド開発 >Golang >Golang で指数を使用して JSON 数値をアンマーシャリングする方法

Golang で指数を使用して JSON 数値をアンマーシャリングする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 10:31:021035ブラウズ

How to Unmarshal JSON Numeric Values with Exponents in Golang?

Golang Json 指数を使用した数値のアンマーシャリング

Golang で JSON 文字列を構造体にアンマーシャリングする場合、指数を含む数値は 0 として解釈されることがよくあります。指数は JSON の標準部分であるため、これは困難になる可能性があります。

この問題に対処するには、数値フィールドの型を float32 または float64 に変更する必要があります。これらの浮動小数点型は、指数の表現をサポートします。例:

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}

型を変更した後、JSON 文字列を構造体にアンマーシャリングすると、指数を含む数値が正しく解析されます。

ヘルパー関数を使用した代替アプローチ

数値フィールドを整数にする必要がある場合は、アンマーシャリング後に浮動小数点値を整数型にキャストするヘルパー関数:

import (
    "encoding/json"
    "fmt"
    "math"
    "os"
    "reflect"
)

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"}`)

func main() {
    _ = json.Unmarshal(b, &f)

    if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
        fmt.Println(math.Trunc(f.Id))
        f._Id = int64(f.Id)
    }
}

この例では、ヘルパー関数 math.Trunc は浮動小数点値を整数に切り捨てます。切り捨てられた値は、_Id フィールドに割り当てられます。

以上がGolang で指数を使用して JSON 数値をアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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