golang 에서 json. Number 의 묘 용

2891 단어 go.
golang 에서 json. Number 의 묘 용
 
최근 에 한 스 와 API 인 터 페 이 스 를 디 버 깅 하고 인터페이스 반환 데 이 터 는 json 형식 이 며 문서 설명 에 따라 전체 데이터 이 므 로 다음 과 같이 정의 합 니 다.
    type Data struct {
        Api int `json:"api"`
    }

입 참 이 같은 상황 에서 첫 번 째 호출 에서 얻 은 결 과 는:
{"api":1}

그러나 두 번 째 호출 결 과 는:
{"api":"1"}

상대방 개발 자 와 소통 한 후에 이것 은 bug 라 는 것 을 알 게 되 었 습 니 다. 절차 문제 로 인해 즉시 온라인 을 수정 할 수 없 었 습 니 다. 생각해 보 니 제 가 호 환 하 는 것 이 좋 겠 습 니 다. 효 과 는 {"api":1} 도 해석 할 수 있 고 {"api":"1"} 도 해석 할 수 있 기 때문에 저 는 생각 했 습 니 다 json.Number. Number 유형 정 의 는 다음 과 같 습 니 다.
The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed.
간단하게 번역: Number 10 진수 로 표시 할 수 있 지만 선도 0 데 이 터 는 허용 되 지 않 습 니 다 (좋 습 니 다. 여기 가 적당 하지 않 습 니 다. 예 를 들 어 이런 012, -012 등 우 리 는 데이터 구 조 를 재 조정 합 니 다.
    type Data struct {
        Api json.Number `json:"api"`
    }

데이터 분석
    var d Data
    err := json.Unmarshal([]byte(`{"api":"12"}`), &d)

실제로 우리 가 직면 한 문 제 는 데이터 가 10 진수 일 것 이다. 그러나 "" 번호 가 있 는 지 없 는 지 는 확실 하지 않다. json.Number 는 데이터 라 는 개념 을 추상 화하 고 유형 을 확보 하 는 전제 에서 호출 자가 최종 적 으로 사용 하 는 유형 을 결정 하 는 데 도움 을 주 었 다.
// String returns the literal text of the number.
func (n Number) String() string { return string(n) }

// Float64 returns the number as a float64.
func (n Number) Float64() (float64, error) {
    return strconv.ParseFloat(string(n), 64)
}

// Int64 returns the number as an int64.
func (n Number) Int64() (int64, error) {
    return strconv.ParseInt(string(n), 10, 64)
}

저 는 안전하게 사용 할 수 있어 요.
    d.Api.Int64()

원 하 는 타 입 을 얻는다.
API 인 터 페 이 스 는 float 0.0 을 출력 해 야 하 며, 이러한 json. Number 로 처리 할 수도 있다.
{
   "profit": 9.0000,
   "issuePeriod": 0.0
}
json.Number(fmt.Sprintf(`%.2f`, 1.0000))

물론 내 문 제 는 RawMessage 유형 으로 해결 할 수 있다.
    type Data struct {
        Api json.RawMessage `json:"api"`
    }

문서 의 해석 은 다음 과 같다.
// RawMessage is a raw encoded JSON value.
// It implements Marshaler and Unmarshaler and can
// be used to delay JSON decoding or precompute a JSON encoding.
type RawMessage []byte

필드 이름 을 확인 하고 json 안의 원시 데이터 값 을 가 져 와 원 하 는 유형 으로 전환 합 니 다.원본 코드 를 자주 읽 고 항상 새것 을 읽는다.

좋은 웹페이지 즐겨찾기