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