Go에서 지수가 포함된 JSON 숫자를 처리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-17 08:03:03
원래의
274명이 탐색했습니다.

How to Handle JSON Numerals with Exponents in Go?

Go에서 지수가 있는 JSON 숫자 디코딩

JSON 데이터를 Go 구조로 언마샬링할 때 지수가 있는 숫자 값이 0으로 잘못 해석되는 경우가 많습니다. 이는 구조의 대상 필드가 정수 유형으로 선언된 경우 발생합니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  1. 필드 유형을 수정하세요. 지수가 포함된 숫자 값이 저장될 필드 유형을 uint64에서 float32 또는 float64로 변경합니다. 예:
type Person struct {
    Id   float32  `json:"id"`
    Name string `json:"name"`
}
로그인 후 복사
  1. JSON을 비정렬화합니다. json.Unmarshal 함수를 사용하여 평소와 같이 비정렬화 작업을 수행합니다. 이제 지수가 포함된 숫자 값이 올바르게 해석됩니다.

예:

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type Person struct {
    Id   float32  `json:"id"`
    Name string `json:"name"`
}

func main() {

    // Create the JSON string.
    var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`)

    // Unmarshal the JSON to a proper struct.
    var f Person
    json.Unmarshal(b, &f)

    // Print the person.
    fmt.Println(f)

    // Unmarshal the struct to JSON.
    result, _ := json.Marshal(f)

    // Print the JSON.
    os.Stdout.Write(result)
}
로그인 후 복사

결과는 다음과 같습니다.

{1.2e+08 Fernando}
{"id":1.2e+08,"Name":"Fernando"}
로그인 후 복사

대체 접근법:

정수 유형을 사용해야 하는 경우 필드의 경우 float64 유형의 "더미" 필드를 사용하여 지수로 숫자 값을 캡처할 수 있습니다. 그런 다음 후크를 사용하여 값을 실제 정수 유형으로 캐스팅합니다.

예는 다음과 같습니다.

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}

var f Person
var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`)
_ = json.Unmarshal(b, &f)

if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
    fmt.Println(f.Id)
    f._Id = int64(f.Id)
}
로그인 후 복사

출력은 다음과 같습니다.

1.2e+08
{Name:Fernando Id:120000000}
로그인 후 복사

위 내용은 Go에서 지수가 포함된 JSON 숫자를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿