지수가 있는 숫자 값의 JSON 역정렬화
Golang 사용자는 JSON 문자열을 지수가 있는 숫자 값이 포함된 Go 구조로 역정렬화하려고 할 때 어려움을 겪을 수 있습니다. . 기본적으로 Go는 이러한 값을 잘못 해석하여 정밀도가 떨어집니다.
문제 데모
다음 Go 코드를 고려하세요.
type Person struct { Id uint64 `json:"id"` Name string `json:"name"` } func parseJSON(jsonStr []byte) { var person Person json.Unmarshal(jsonStr, &person) // The numeric value with an exponent is lost. fmt.Println(person.Id) }
{ "id": 1.2E 8, "name": "John" }과 같은 JSON 문자열을 입력으로 제공하면,parseJSON 함수는 지수가 무시됨을 나타내는 0을 인쇄합니다.
해결 방법
이 문제를 해결하려면 아래 설명과 같이 Id 필드 유형을 float64와 같은 부동 소수점 유형으로 조정하세요.
type Person struct { Id float64 `json:"id"` Name string `json:"name"` }
이 수정을 통해 Go to 지수를 올바르게 해석하고 숫자 값을 보존합니다.
후크를 사용한 대체 접근 방식
필드 유형을 변경할 수 없는 경우 다음과 관련된 해결 방법을 사용할 수 있습니다. "더미" 필드 및 사용자 정의 후크. 이 후크는 "더미" 필드의 값을 원하는 정수 유형으로 변환합니다.
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } func parseJSONWithHook(jsonStr []byte) { var person Person json.Unmarshal(jsonStr, &person) if reflect.TypeOf(person._Id) == reflect.TypeOf((int64)(0)) { person._Id = int64(person.Id) } }
두 가지 접근 방식 중 하나를 따르면 Go 프로그램에서 지수가 포함된 숫자 값을 성공적으로 처리할 수 있습니다.
위 내용은 Go에서 지수가 포함된 JSON 숫자 값을 비정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!