> 백엔드 개발 > Golang > Golang에서 지수를 사용하여 JSON 숫자 값을 비정렬화하는 방법은 무엇입니까?

Golang에서 지수를 사용하여 JSON 숫자 값을 비정렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-15 10:31:02
원래의
1032명이 탐색했습니다.

How to Unmarshal JSON Numeric Values with Exponents in Golang?

Golang Json 지수가 있는 숫자 비마샬링

JSON 문자열을 Golang의 구조체로 역마샬링할 때 지수가 있는 숫자 값이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿