> 백엔드 개발 > Golang > Go에서 JSON을 구문 분석할 때 Int64 값을 보존하는 방법은 무엇입니까?

Go에서 JSON을 구문 분석할 때 Int64 값을 보존하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-14 16:36:18
원래의
554명이 탐색했습니다.

How to Preserve Int64 Values When Parsing JSON in Go?

Go에서 JSON을 구문 분석할 때 Int64 값 유지

int64 값을 가진 객체 배열이 포함된 JSON POST 요청을 처리할 때 변환 문제가 발생하는 것이 일반적입니다. JSON.Unmarshal은 이러한 값을 float64로 자동 변환하므로 불편할 수 있습니다. 이 문서에서는 원래 int64 값을 보존하는 솔루션을 살펴봅니다.

해결책 1: 숫자 유형 사용

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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