>백엔드 개발 >Golang >Go에서 문자열로 저장된 Float64 값으로 JSON 문자열을 디코딩하는 방법은 무엇입니까?

Go에서 문자열로 저장된 Float64 값으로 JSON 문자열을 디코딩하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-01 12:59:11180검색

How to Decode JSON Strings with Float64 Values Stored as Strings in Go?

Go에서 문자열을 float64로 유형 변환하여 JSON을 디코딩

float64 값이 포함된 JSON 문자열을 구문 분석하면 값을 저장할 때 문제가 발생할 수 있습니다. 문자열로. 이 문제를 해결하기 위해 Go는 간단한 솔루션을 제공합니다.

오류 이해:

"{"name":"Galaxy Nexus와 같은 JSON 문자열을 디코딩하려고 할 때 ", "price":"3460.00"}" json.Unmarshal 함수를 사용하면 다음과 같은 상황이 발생할 수 있습니다. 오류:

json: cannot unmarshal string into Go value of type float64

이 오류는 JSON 디코더가 float64 숫자의 문자열 표현을 지원되지 않는 float64 값으로 직접 변환하려고 시도하기 때문에 발생합니다.

해결책: 유형 변환 주석

이 문제를 해결하려면 문자열을 문자열로 처리하도록 디코더에 명시적으로 지시해야 합니다. 유형 변환 주석을 사용하는 float64. 이 주석은 Product 구조체의 필드 정의에 추가됩니다.

type Product struct {
    Name  string
    Price float64 `json:",string"`
}

",string" 태그는 JSON 디코더에 Price 필드가 float64로 변환되어야 하는 문자열임을 알려줍니다.

업데이트된 코드:

업데이트된 Go는 다음과 같습니다. 코드:

package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Name  string
    Price float64 `json:",string"`
}

func main() {
    s := `{"name":"Galaxy Nexus", "price":"3460.00"}`
    var pro Product
    err := json.Unmarshal([]byte(s), &pro)
    if err == nil {
        fmt.Printf("%+v\n", pro)
    } else {
        fmt.Println(err)
        fmt.Printf("%+v\n", pro)
    }
}

예상 출력:

이 코드를 실행하면 예상 출력이 생성됩니다.

{Name:Galaxy Nexus Price:3460}

json.Unmarshal 함수가 성공적으로 수행되었습니다. JSON 문자열을 디코딩하고 가격을 문자열에서 float64로 변환했습니다.

위 내용은 Go에서 문자열로 저장된 Float64 값으로 JSON 문자열을 디코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.