"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go Json에서 마샬링이 떠 다니면 후행 0을 보존하는 방법?

Go Json에서 마샬링이 떠 다니면 후행 0을 보존하는 방법?

2025-03-25에 게시되었습니다
검색:225

How to Preserve Trailing Zeros When Marshaling Floats in Go JSON?

문제 :

[예 : 40.0), json.marshal ()이 0이없이 값을 출력 할 때 (예 : 40). 이 동작은 외부 프로그램이 후행 0을 가진 부동 소수점 번호를 기대하면 문제가 될 수 있습니다.

솔루션 1 (권장) : 사용자 정의 플로트 유형

를 사용하여 사용자 정의 플로트 유형을 정의하고 JSON 직렬화를 제어합니다. 예는 다음과 같습니다.
type KeepZero float64

func (f KeepZero) MarshalJSON() ([]byte, error) {
    if float64(f) == float64(int(f)) {
        return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil
    }
    return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil
}
Keepzero float64를 입력하십시오 func (f rewezero) Marshaljson () ([] byte, error) { If float64 (f) == float64 (int (f)) { return [] byte (stronv.formatfloat (float64 (f), 'f', 1, 32)), nil } return [] byte (stronv.formatfloat (float64 (f), 'f', -1, 32)), nil }

이 사용자 정의 유형에서 Marshaljson () 메소드는 플로트를 하나의 자손 장소로 문자열로 변환하거나 (정수가 아닌 경우) 모든 소수점을 보존합니다 (&&&]

예 :

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{Value: 40.0, Unit: "some_string"})
    fmt.Println(string(data), err)
}

이 코드 출력 { "value": 40.0, "unit": "some_string"} & lt; nil & gt;

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3