Go에서 JSON 정수를 정수로 구문 분석
Go의 인코딩/json 패키지에서 JSON 구문 분석 중 모든 숫자는 기본적으로 부동 소수점으로 해석됩니다. 그러나 JSON 데이터를 구문 분석하는 동안 정수와 부동 소수점을 정확하게 구별하려면 다음 접근 방식을 고려하십시오.
예: 사용자 정의 JSON 값 사용
json.RawMessage 및 strconv를 사용하여 숫자를 int 및 float로 구문 분석하고 다른 값은 있는 그대로 처리합니다.
package main import ( "encoding/json" "fmt" "strconv" ) func main() { str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}` var raw map[string]json.RawMessage err := json.Unmarshal([]byte(str), &raw) if err != nil { panic(err) } parsed := make(map[string]interface{}, len(raw)) for key, val := range raw { s := string(val) i, err := strconv.ParseInt(s, 10, 64) if err == nil { parsed[key] = i continue } f, err := strconv.ParseFloat(s, 64) if err == nil { parsed[key] = f continue } var v interface{} err = json.Unmarshal(val, &v) if err == nil { parsed[key] = v continue } parsed[key] = val } for key, val := range parsed { fmt.Printf("%T: %v %v\n", val, key, val) } }
예: json.Number 사용
json.Number 유형 사용 활성화 정수 값을 명시적으로 처리할 수 있는 숫자 구문 분석의 경우:
package main import ( "encoding/json" "fmt" "strings" ) func main() { str := `{"a":123,"b":12.3,"c":"123","d":"12.3","e":true}` var parsed map[string]interface{} d := json.NewDecoder(strings.NewReader(str)) d.UseNumber() err := d.Decode(&parsed) if err != nil { panic(err) } for key, val := range parsed { n, ok := val.(json.Number) if !ok { continue } if i, err := n.Int64(); err == nil { parsed[key] = i continue } if f, err := n.Float64(); err == nil { parsed[key] = f continue } } for key, val := range parsed { fmt.Printf("%T: %v %v\n", val, key, val) } }
이 두 예제 모두 원하는 대로 JSON 숫자를 정수 또는 부동 소수점으로 성공적으로 구문 분석합니다.
위 내용은 Go에서 JSON 숫자를 정수 또는 부동 소수점으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!