Golang JSON 비정렬 오류: 지수가 포함된 숫자 값이 0을 반환합니다
JSON 데이터를 Go 구조체로 비정렬화하려고 시도하는 동안 사용자가 지수가 포함된 숫자 값이 일관되게 0으로 해석되는 문제. 이 동작은 예상 유형과 실제 값이 일치하지 않기 때문에 발생합니다.
예를 들어 {"id": 1.2e 8과 같은 JSON 문자열이 있는 경우 , "Name": "Fernando"}는 uint64 유형의 ID 필드가 있는 구조체로 역마샬링되며 결과 Id는 0이 됩니다.
해결책
이 문제를 해결하려면 구조체의 필드 유형이 JSON 문자열의 데이터 유형과 일치하는지 확인하세요. 이 경우 지수를 사용하므로 Id 필드를 float32 또는 float64와 같은 부동 소수점 유형으로 정의해야 합니다.
대체 솔루션
예상 유형이 JSON 숫자 형식과 호환되지 않는 경우 해결 방법을 구현할 수 있습니다. 원하는 유형의 "더미" 필드를 추가하면 후크를 사용하여 값을 실제 예상 유형으로 캐스팅할 수 있습니다.
예:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
JSON 데이터를 정렬 해제한 후 Person 구조체에 조건부 검사를 추가하여 Id 필드를 int64로 변환할 수 있습니다.
var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
이 해키 접근 방식을 사용하면 부동 소수점 Id 필드를 원하는 int64 유형으로 변환할 수 있습니다.
위 내용은 지수가 포함된 숫자 값을 만날 때 Golang JSON이 오류를 비정렬화하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!