JSON 데이터를 Go 구조로 언마샬링할 때 지수가 있는 숫자 값이 0으로 잘못 해석되는 경우가 많습니다. 이는 구조의 대상 필드가 정수 유형으로 선언된 경우 발생합니다.
이 문제를 해결하려면 다음 단계를 따르세요.
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
예:
package main import ( "encoding/json" "fmt" "os" ) type Person struct { Id float32 `json:"id"` Name string `json:"name"` } func main() { // Create the JSON string. var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`) // Unmarshal the JSON to a proper struct. var f Person json.Unmarshal(b, &f) // Print the person. fmt.Println(f) // Unmarshal the struct to JSON. result, _ := json.Marshal(f) // Print the JSON. os.Stdout.Write(result) }
결과는 다음과 같습니다.
{1.2e+08 Fernando} {"id":1.2e+08,"Name":"Fernando"}
대체 접근법:
정수 유형을 사용해야 하는 경우 필드의 경우 float64 유형의 "더미" 필드를 사용하여 지수로 숫자 값을 캡처할 수 있습니다. 그런 다음 후크를 사용하여 값을 실제 정수 유형으로 캐스팅합니다.
예는 다음과 같습니다.
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"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
출력은 다음과 같습니다.
1.2e+08 {Name:Fernando Id:120000000}
위 내용은 Go에서 지수가 포함된 JSON 숫자를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!