Go에서 JSON을 구문 분석할 때 Int64 값 유지
Go에서 JSON 데이터를 구문 분석할 때 json.Unmarshal 함수는 종종 큰 정수 값을 다음으로 변환합니다. 유지 관리에 문제가 될 수 있는 float64 유형 정밀도.
해결책 1:
원래 int64 값을 유지하려면 디코더와 UseNumber 옵션을 사용하세요.
package main import ( "encoding/json" "fmt" "bytes" "strconv" ) func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") d := json.NewDecoder(bytes.NewBuffer(body)) // Enable number preservation d.UseNumber() var dat map[string]interface{} if err := d.Decode(&dat); err != nil { panic(err) } tags := dat["tags"].([]interface{}) n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) fmt.Println(i64) // prints 4418489049307132905 }
해결책 2:
또는 사용자 정의 데이터 구조로 직접 디코딩할 수 있습니다.
package main import ( "encoding/json" "fmt" ) type A struct { Tags []map[string]uint64 // "tags" } func main() { body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}") var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } fmt.Println(a.Tags[0]["id"]) // logs 4418489049307132905 }
주의:
JavaScript의 번호에 유의하세요. 유형은 IEEE754 배정밀도 부동 소수점입니다. 이는 손실 없이 64비트 정수를 표현할 수 없음을 의미합니다. 정밀합니다.
위 내용은 Go에서 JSON을 구문 분석할 때 Int64 정밀도를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!